面向对象
-
与面向过程对比:二狗子准备结婚,需要盖房子
-
面向过程:数学逻辑的映射,学会做个好员工
-
面向对象:生活逻辑的映射,学会做个好领导
-
-
生活实例
-
类: 人 手机 电脑
-
对象: 习大大、黄友 杰哥的T2手机、路飞的iPhone X 杰哥的mac、李森的华硕
-
-
官方定义:
-
类:具有相同特征(属性和行为)事物的抽象
-
对象:某个类的具象
-
-
编程语言:
-
类:是一种自定义的数据类型
-
对象:某个类型的变量
-
类的语法
-
定义类:
class 类名:
内容 -
示例:定义一个人的类
# 定义类 class Person: # 行为的体现,通过方法 ? # 吃饭 def eat(self): print(‘红烧鸡腿我喜欢吃‘) ? # 打篮球 def play(self): print(‘俺喜欢打篮球‘)
-
声明对象
bryant = Person()
-
调用方法
bryant.eat()
bryant.play()
-
设置属性:是动态添加的
bryant.name = ‘科比.布莱恩特‘
-
获取属性
print(bryant.name)
?
- 语法
?
- 定义类需要使用关键字:class
- 类名:原则上只要符合标识符的命名规范即可,但是我们通常使用大驼峰风格(每个单词首字母大写)命名
- 不要忘记类名后面的冒号‘:‘
- 类的内容要进行缩进
- 行为:通过函数体现,与外面定义函数的方式相似,第一个参数默认是self
- 属性:通过变量体现,属性是动态添加的,因此在定义时可以不体现
- 成员访问:
- 成员属性:对象.属性名
- 成员方法:对象.方法名()
?
- self
?
- 示例:
?
```python
class Person: def run(self): # self表示当前对象:谁调用该方法就代表谁 print(‘{}每天以2m/s的速度锻炼5km‘.format(self.name)) ? def introduce(self): # self这个名字可以是任意的,但是通过都是要这个 # 既可以访问成员属性 print(‘我叫{}‘.format(self.name)) # 也可以调用成员方法 self.run() ? mugai = Person() mugai.name = ‘木盖‘ ? # print(mugai) mugai.run() ? curry = Person() curry.name = ‘斯蒂芬.库里‘ curry.run() # 调用方法是第一个参数self不需要 curry.introduce()
-
说明:
-
每个成员方法都有这么一个参数,调用的时候不需要传递
-
名字可以不是self,只不过通常我们都是要self而已
-
self表示当前对象,谁调用该方法就表示谁,哪个对象调用就代表哪个对象
-
通过self可以访问成员属性,也可以调用成员方法
-
-
__ str __方法
-
示例:
class Person: # 使用print函数打印对象时,默认打印对象所属类型及对象地址 # 该函数要求返回一个字符串,当对象作为print参数打印时会打印该字符串 def __str__(self): # 要求返回一个字符串 return ‘我叫{},今年{}‘.format(self.name, self.age) xiaoming = Person()
xiaoming.name = ‘小明‘
xiaoming.age = 18 print(xiaoming) -
- 练习:
- 自定义一个狗类,完成属性的动态添加,方法的调用
- 属性:名字、年龄、颜色
- 方法:跑、吃、游泳、叫