java c++ python(都是面向对象的语言, c是面向过程的语言)
面向过程:1—>2
—>3—>4 怎么做
面向对象:4 谁来做
相对于函数来说是一个更大的封装,根据职责将对象所能实现的功能封装到一起
1.确定对象要做的事情(方法->多个)
2.让对象调用方法
植物大战僵尸
对象:向日葵 豌豆射手 僵尸
属性:生命值 生命值 生命值
方法:生产阳光() 发射子弹() 移动()
摇摇晃晃() 咬()
类:是一群具有相同特征和行为事物的一个统称(抽象的–>不能直接使用)
特征:被称为属性
行为:被称为方法
对象:由类创建出来的一个具体的存在,由哪一个类创建出来的
对象,就拥有哪一个类中定义的方法和属性
先有类–>再有对象
类和对象的关系:
类是模板,对象是根据这个模板创建出来的,先有类再有对象
类只需要有一个,对象可以有很多个
不同对象(由同一类创建出来的对象)之间的属性可以不相同
类中定义了什么属性和方法,使用这个类创建出来的对象就有什么
属性和方法,不可能多也不可能少
类的设计
1.类名:这类事物的名字(大驼峰命名法)
大驼峰命名法
1.每一个单词的首字母大写
2.单词与单词之间没有下划线
2.属性:这个类创建出来的对象有什么样的特征
3.方法:这个类创建出来的对象有什么样的行为
类名的确定
名词提炼法分析整个业务流程,出现的名词,通常就是找到的类
属性和方法的确定
对 对象的特征描述,通常可以定义成属性
对象具有的行为(动词),通常可以定义为方法
提示:需求中没有涉及的属性或方法在设计类时,不需要考虑
类、属性、方法为了加以区分,举几个简单的例子:
练习1:
需求:
小明今年18岁,身高1.75,每天早上要跑步,小明吃东西
小美今年17岁,身高1.65 小美不跑步,小美吃东西
类:Person
属性:name age height
方法:run()
eat()
练习2:
一只黄颜色的狗狗叫大黄
看见生人旺旺叫
看见家人摇尾巴
类:Dog
属性:color
name
方法:shake shout
分清了类、属性、方法后运用到具体编程里:
题目:猫爱吃鱼,猫要喝水
# 哪一个对象调用的方法,self就是哪一个对象的引用(面试常考)
# 在类封装方法的内部,self就表示当前调用方法的对象自己
# 在的方法内部 可以通过 self.属性 来访问对象的属性
class Cat:
def eat(self):
print('猫爱吃鱼')
def drink(self):
print('猫要喝水')
tom = Cat()
print(tom)
tom.eat()
tom.drink()
输出:
<__main__.Cat object at 0x7f7231eef588>
猫爱吃鱼
猫要喝水
class Cat:
def eat(self):
print('%s 爱吃鱼' %(self.name))
def drink(self):
print('猫要喝水')
# 创建猫对象
tom = Cat()
# 在类的外部 对象.属性 可以给对象添加属性
# 不推荐使用
# 对象包含哪些方法,应该封装在类中
tom.name = 'Tom'
print(tom)
addr = id(tom)
print(addr)
# %x:打印格式为十六进制
print('%x' %(addr))
# %d:打印格式为十进制
print('%d' %(addr))
tom.eat()
tom.drink()
输出:
<__main__.Cat object at 0x7fb8de2c35f8>
140431978149368
7fb8de2c35f8
140431978149368
Tom 爱吃鱼
猫要喝水
# 可以再创建一个猫对象
lazy_cat = Cat()
lazy_cat.name = 'miaomiao'
print(lazy_cat)
lazy_cat.eat()
lazy_cat.drink()
lazy_cat2 =lazy_cat
print(lazy_cat2)
输出:
<__main__.Cat object at 0x7fb8de2c3668>
miaomiao 爱吃鱼
猫要喝水
<__main__.Cat object at 0x7fb8de2c3668>