Day26
今日总结
动态方法、静态方法
# 动态方法
# 绑定给对象的方法
class Student:
def run(self):
print(self)
# 类调用绑定给对象的方法时有多少参数就需要传多少参数
print(Student.run(1)) # 1 None
# 对象调用绑定给对象的方法时会自动将对象当做第一个参数传入
obj1 = Student()
obj1.run() # <__main__.Student object at 0x000002447426A6A0>
# 绑定给类的方法
class Student:
@classmethod
def study(cls):
print(cls)
# 类调用绑定给类的方法时自动将类当做第一个参数传入
Student.study() # <class '__main__.Student'>
# 对象调用绑定给类的方法时不需要传参 产生该对象的类会第一个参数传入
obj1 = Student()
obj1.study() # <class '__main__.Student'>
# 静态方法(定义在类中,并且使用 @staticmethod 修饰器修饰,没有 cls 和 self 参数限制)
class Student:
@staticmethod
def speak(a):
print(a)
# 类调用静态方法:自己传值
Student.speak(123) # 123
# 对象调用静态方法:自己传值
obj1 = Student()
obj1.speak(321) # 321
面向对象之继承
'''
面向对象三大特性-->继承*、封装、多态
在面向对象中继承用来描述类与类之间的从属关系
eg:类A继承了类B 那么类A就可以使用类B中所有的数据、功能等
继承可以减少代码冗余,提高开发效率,并且支持多继承
对象:数据与功能的结合体
类:多个对象相同数据和功能的结合体
父类:多个类相同数据和功能的结合体
'''
# 继承的语法结构
class A(B):
pass
# 被继承的类称为-->父类或者基类 继承别人的类称为-->子类或者派生类
# 继承与抽象
抽象:由下往上提取相同特征
继承:由上往下功能传承
名字的查找顺序
# 单继承情况
从对象自己的名称空间中查找,没有择取产生对象的类中查找,如果也没有并且类有父类则到父类中查找 以此往复
对象-->类-->类的父类
# 多继承情况
'''
新式类:直接或者间接继承了object或者其子类的类
经典类:不继承任何的类
在python2中存在经典类与新式类,而在python3中只有新式类
区别在于是否继承了一个默认的object类
我们在定义类的时候会习惯性的写
class MyClass(object):
pass
是为了兼容python2和python3
'''
# 非菱形继承的情况下(对象继承的父类不为其他类的子类)
按照继承时从左往右依次查找
A-->B-->c
:
# 非菱形继承的情况下(对象继承的父类为其他类的子类)
父类中名字的查找顺序就是按照继承时从左往右依次查找
如果多个父类还有分类 那么遵循"深度优先"
A-->D-->B-->E-->C-->F
:
# 菱形继承的情况下
父类中名字的查找顺序就是按照继承时从左往右依次查找
如果多个父类还有分类 那么遵循"广度优先"
A-->D-->B-->E-->C-->F-->M
:
# 上课的案例(做错了)
经典案例
class A:
def f1(self):
print('from A.f1')
def f2(self):
print('from A.f2')
self.f1()
class MyClass(A):
def f1(self):
print('from MyClass.f1')
obj = MyClass()
obj.f2()
'''
from A.f2
from MyClass.f1
'''
派生类
class Person:
def __init__(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender
class Teacher(Person):
def __init__(self,name,age,gender,level,salary):
super().__init__(name,age,gender)
# super(Teacher,self).__init__(name,age,gender) 上面是简写
self.level = level
self.salary = salary
class Student(Person):
def __init__(self,name,age,gender,stu_id,class_id):
super().__init__(name, age, gender)
# super(Teacher,self).__init__(name,age,gender) 上面是简写
self.stu_id = stu_id
self.class_id = class_id
# 子类继承父类后如果需要扩展可以使用super关键字,这样的子类就叫派生类,本质其实还是子类
明天又是周五了,大作业
:

浙公网安备 33010602011771号