- 目录
- 对象的独有功能
- 动静态方法
- 面向对象的特征
- 面向对象的的三大特征
- 继承的本质
- 不继承的名字查找顺序
- 单继承的名字查找顺序
- 多继承的名字查找顺序
- 经典类与新式类
- 派生方法
- 对象的独有功能
1.定义:绑定在类中的函数(每个被类创造出的对象所使用类中的方法从而获得不同数据)
class Computer: name = '电脑' def price(self, model): print(f'{model}电脑便宜出售') com1 = Computer() com2 = Computer() com1.price('联想') # 联想电脑便宜出售 com2.price('苹果') # 苹果电脑便宜出售
- 动静态方法
1.绑定给对象的方法,直接在类体代码中编写即可,对象调用会自动将对象当做第一个参数传入
2.绑定给类的方法类 调用则有几个形参就传几个实参
3.静态方法(普通函数)
class Computer: name = '电脑' def price(self, model): print(f'{model}电脑便宜出售{self}') # self <__main__.Computer object at 0x0000015A98BBE048> @classmethod def func(cls, type): print(f'{type}电脑性能很好{cls}') # cls <class '__main__.Computer'> @staticmethod def exterior(type): print(f'{type}电脑外观好看') com1 = Computer() com2 = Computer() com1.price('联想') # 联想电脑便宜出售 com2.price('苹果') # 苹果电脑便宜出售 Computer.price(com1, '联想') # 联想电脑便宜出售<__main__.Computer object at 0x000001F638F2E048> com1.func('笔记本') # 联想电脑性能很好<class '__main__.Computer'> Computer.func('笔记本') # 联想电脑性能很好<class '__main__.Computer'> com1.exterior('笔记本') # 联想电脑外观好看 Computer.exterior('笔记本') # 联想电脑外观好看
- 类的三大特征之继承
1.类的三大特征:
1.1 继承
1.2 封装
1.3 多态

2.继承的本质:获得别的类的属性(数据与功能)之间的关系称为父类、基类或超类与子类、派生类
2.1 对象:数据和功能的结合体
2.2 类:多个对象相同的数据和功能的结合体
2.3 父类:多个类相同的数据和功能的结合体
类和父类最主要的功能其实就是节省代码
class School: name = '华清大学' def education(self, name): print(f'{name}授课') class Student(School): major = '摄影专业' def __init__(self, hobby): self.hobby = hobby print(Student.name) # 华清大学 stu1 = Student(School) Student.education(stu1, '李老师') # 李老师授课 stu2 = School() School.education(stu2, '李老师') # 李老师授课 Student.education(stu2, '李老师') # 李老师授课
3.类不继承的名字查找顺序:对象先查找自身名称空间、自身没有再查找创造对象的类的名称空间、都无报错 (自身>>>类)
class School: name = '华清大学' # 2 def major(self, name): print(f'{name}') stu1 = School() stu1.name = '摄影专业' # 1 print(stu1.name) # 摄影专业
stu1 = School()
print(stu1.name) # 华清大学
4.类单继承的名字查找顺序:对象先查找自身名称空间、自身没有再查找创造对象的类的名称空间,再无查找继承的父类的名称空间、都无报错(自身>>>类>>>父类)
class School: name = '华清大学' # 3 class Student(School): # name = '摄影一班' # 2 def major(self, name): print(f'{name}') stu1 = Student() stu1.name = '摄影专业' # 1 print(stu1.name) # 摄影专业 stu1 = Student() print(stu1.name) # 摄影一班 stu1 = Student() print(stu1.name) # 华清大学

5.类多继承的名字查找:
5.1 每个分支最后继承的类没有共同继承的类:自身>>>类>>>每个分支一层一层父类
class School1: # name = '华清大学' # 4 pass class School2: # name = '宜荷大学' # 6 pass class School3: # 8 # name = '南芜大学' pass class Major1(School1): # name = '摄影专业' # 3 pass class Major2(School2): # name = '绘画专业' # 5 pass class Major3(School3): # name = '多媒体专业' # 7 pass class Student(Major1, Major2, Major3): # name = '摄影一班' # 2 def grade(self, name): print(f'{name}') stu1 = Student() # stu1.name = '大三' # 1 print(stu1.name)

5.2 每个分支最后继承的类有共同继承的类:自身>>>类>>>每个分支一层一层父类>>>共同继承的类
class Country: name = '中国' # 9 pass
class School1(Country): # name = '华清大学' # 4 pass class School2(Country): # name = '宜荷大学' # 6 pass class School3(Country): # 8 # name = '南芜大学' pass class Major1(School1): # name = '摄影专业' # 3 pass class Major2(School2): # name = '绘画专业' # 5 pass class Major3(School3): # name = '多媒体专业' # 7 pass class Student(Major1, Major2, Major3): # name = '摄影一班' # 2 def grade(self, name): print(f'{name}') stu1 = Student() # stu1.name = '大三' # 1 print(stu1.name)

- 经典类与新式类
1.经典类:python2环境中无法直接继承object祖先辈类,所以需要手动继承,不然很多功能无法使用
2.新式类:python3环境中默认直接继承object祖先辈类,所以无需手动继承,但为防止可能会切换python2环境,所以建议加object类
class School: name = '华清大学' print(f'{name}') print(School.__base__) # class 'object'> class School(object): name = '华清大学' print(f'{name}') print(School.__base__) # class 'object'>
- 派生方法:在子类中定义父类的功能并增加功能
class School: name = '华清大学' def __init__(self, rank): self.rank = rank class Student(School): def __init__(self, rank, major): School.__init__(self, rank) # super.__init__(rank) self.major = major stu1 = Student('排名第一', '摄影专业') print(stu1.__dict__) # {'rank': '排名第一', 'major': '摄影专业'} print(stu1.rank) # 排名第一 class School(list): def append(self, value): # if value == '清水高中': # return super().append(value) sch1 = School() sch1.append('南芜大学') print(sch1) # ['南芜大学'] sch1.append('清水高中') # ['南芜大学'] print(sch1) sch1.append('宜荷大学') print(sch1) # ['南芜大学', '宜荷大学'
posted on
浙公网安备 33010602011771号