美文网首页
day27类的派生\组合\多态

day27类的派生\组合\多态

作者: 荭鲤鱼与緑鲤鱼与驴 | 来源:发表于2020-08-10 20:05 被阅读0次

    派生新方法重用父类功能二
    特性:严格依赖继承关系
    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(类,父类) 判断类是不是父类的子类

    相关文章

      网友评论

          本文标题:day27类的派生\组合\多态

          本文链接:https://www.haomeiwen.com/subject/wmihdktx.html