Day26
作者:互联网
今日总结
动态方法、静态方法
1.绑定给对象的方法
class Student:
def run(self):
prtin(self)
# 类调用绑定给对象的方法:有几个参数就需要传几个参数
Student.run(123)
# 对象调用绑定给对象的方法:会自动将对象当做第一个参数传入
obj1.run()
2.绑定给类的方法
class Student:
@classmethod
def eat(cls):
prtin(cls)
# 类调用绑定给类的方法:自动将类当做第一个参数传入
print(Student) # <class '__main__.Student'>
Student.eat() # <class '__main__.Student'>
# 对象调用绑定给类的方法:也不需要传参 会讲产生该对象的类自动当做第一个参数传入
obj1.eat() # <class '__main__.Student'>
# 静态方法
class Student:
@staticmethod
def speak(a):
print(a)
# 类调用静态方法:自己传值
Student.speak(123)
# 对象调用静态方法:要自己传值
obj1.speak(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 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关键字,这样的子类就叫派生类,本质其实还是子类
标签:__,--,self,Day26,继承,父类,class 来源: https://www.cnblogs.com/ymxda9/p/16114588.html