zoukankan      html  css  js  c++  java
  • 面向对象基础(二)

    # 例:#  写三个类: 狗,猫,鸡, 每个类中都有 吃 喝  自己的方法  最后定义一个Animal类,
    
    class Animal:
        def __init__(self,name,sex,age):
            self.name = name
            self.sex = sex
            self.age = age
    
        def eat(self,option):
            print('%s 在吃 %s' %(self.name,option))
    
        def drink(self,option):
            print('%s 在喝 %s' %(self.name,option))
    
    # 以下两个类继承了Animal
    
    class Cat(Animal):
        def miaow(self):
            print('MM')
    
    class Person(Animal):
        def work(self):
            print('Working')
    
    
    
    c1 = Cat('MM','Wom','Tom')
    
    c1.eat('')
    # result:MM 在吃 鱼
    # 可以根据查找链获取到继承来的字段和方法包括构造函数
    # 只执行父类的方法:子类中不要定义与父类同名的方法
    # 只执行子类的方法:在子类创建这个方法.
    # 那么如果我们既要执行子类又要继承父类呢?比如Cat类的实例需要一个特殊的属性hair
    class Cat(Animal):
        def __init__(self,name,sex,age,hair):
            # hair属性是子类独有的第一种方式
            Animal.__init__(self,name,sex,age)
            self.hair = hair
    
        def miaow(self):
            print('MM')
    
    
    c1 =  Cat('MM','Wom','Tom','blue')
    print(c1.hair)
    # result:blue,这种方法非常少见通常都是使用python中的super方法
    class Cat(Animal):
        def __init__(self,name,sex,age,hair):
            # hair属性是子类独有的第一种方式
            super().__init__(name,sex,age)
            #等同于 super(Cat, self).__init__(name, sex, age)
            # super当中两个参数第一个参数传入子类,第二个参数是实例对象,当他调用父类中方法时会自动将self传入
            self.hair = hair
    
    
        def miaow(self):
            print('MM')
    
    
    c1 =  Cat('MM','Wom','Tom','blue')
    print(c1.hair)
    #类分为新式类与经典类,在python3中都是新式类
    # 在python中继承Objct的类都叫做新式类,python2默认是经典类,我们手动继承Objct则转换为新式类
    # 新式类和经典类的区别在于多继承
    # 新式类广度优先又称钻石查找,经典类遵循深度优先
    # 例:
    class A:
        def func(self):
            print('A')
    
    class B(A):
        pass
        # def func(self):
        #     print('B')
    
    class C(A):
        pass
        # def func(self):
        #     print('C')
    
    class D(B):
        pass
        # def func(self):
        #     print('D')
    
    class E(C):
        pass
        # def func(self):
        #     print('E')
    
    
    class F(E,D,C):
        pass
        # def func(self):
        #     print('F')
    
    o1 = F()
    
    print(F.mro())
    # result:[<class '__main__.F'>, <class '__main__.E'>, <class '__main__.D'>, <class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>]
    # 我们从查找顺序上能够得出广度优先的算法
    # 在新式类中python在进行查找时,每查一个类节点它都会与后面的类链进行比较,发现有重合的类节点时,它会放弃当前类链,向后查找,它的计算方式不详细介绍
    # 经典类深度优先不太多介绍,一条类链走到底然后查下一条类链
  • 相关阅读:
    【转+补充】在OpenCV for Android 2.4.5中使用SURF(nonfree module)
    Delphi StarOffice Framework Beta 1.0 发布
    Angular ngIf相关问题
    angularjs文档下载
    公众号微信支付开发
    公众号第三方平台开发 教程六 代公众号使用JS SDK说明
    公众号第三方平台开发 教程五 代公众号处理消息和事件
    公众号第三方平台开发 教程四 代公众号发起网页授权说明
    公众号第三方平台开发 教程三 微信公众号授权第三方平台
    公众号第三方平台开发 教程二 component_verify_ticket和accessToken的获取
  • 原文地址:https://www.cnblogs.com/tengx/p/11856501.html
Copyright © 2011-2022 走看看