派生新方法重用父类功能二
特性:严格依赖继承关系
super(自己的类名.self)函数,会返回一个特殊的对象,super(自己的类型,self).属性,会参照当前类的mro列表去父类中查找属性
就是一个在子类中专门使用父类属性,从属性查找发起者的.mro()列表里面开始查找,从左向右依次查找
class OldboyPeople:
school = "oldboy"
# 空对象,"艾利克斯",73,'male'
def init(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender
def f1(self):
print('1111111')
class Student(OldboyPeople):
def init(self,name,age,gender,stu_id,course):
# OldboyPeople.init(self,name,age,gender) # OldboyPeople.init(空对象,"艾利克斯",73,'male')
super(Student,self).init(name,age,gender)
self.stu_id = stu_id
self.course = course
def choose(self):
print('%s 正在选课' %self.name)
def f1(self):
# OldboyPeople.f1(self)
super().f1() # 会从Student的mro列表中查找
print("22222")
print(Student.mro())
stu1=Student("艾利克斯",73,'male',1001,"python全栈开放")
print(stu1.dict)
stu1.f1()
组合
把另外一个类的对象赋值给当前对象的属性
组合表示的是一种有的关系
继承是什么是什么,组合是什么有什么
class Foo:
def init(self, x, y, z):
self.name = x
self.age = y
self.gender = z
def foo(self):
print('foooo')
class Course:
def f2(self):
print('f2222')
obj1 = Foo('egon', 18, 'male')
obj2 = Course()
obj1.f2 = obj2 # 将一个对象obj2 添加到对象obj1中并新增一个属性名f2
print(obj1.f2.f2()) # 从代码看obj1对象里面是没有f2,但是添加之后我们
可以在obj1里面调用f2属性名里面的f2函数
多态
同一种事物有多种形态
例如:动物这种事物有人,狗,猪,猴
特性:我们可以在不考虑某一个对象具体类型的前提下,直接使用该对象
父类里面的方法,子类里面一定有;父类有的功能,子类一定有
其实就是一个父类被多个子类继承
面向对象高级方法
亦如类中常用的init方法,只要是开头的结尾的
内置方法xxx:内置方法不是给人用的,是在满足某种条件下自动触发
str
在类内定义def str(self): return '返回值必须是str类型'
可以定制对象的打印信息(无此方法时打印对象得到的是对象的内存地址)
del
在类内定义def del(self): 在类运行结束的时候可以自定义删除一些对象,来释放内存
在python中一个概念
一切皆是对象
一个变量,一个函数,一个参数,一个数据,万物皆对象
反射
dir(对象)
hasattr(对象,属性) 判断属性是否存在
getattr(对象,属性,返回值) 没有返回值的时候查看属性,没找到报错,有返回值差找失败时返回返回值,一般返回值写None
setattr 修改属性
delattr 删除属性
使用反射修改查找属性时,属性都是字符串形式
补充知识
内置函数isinstance(数据,类型) 判断数据是不是什么类型的
内置函数issubclass(类,父类) 判断类是不是父类的子类
网友评论