zoukankan      html  css  js  c++  java
  • 7 面相对象编程 类的继承 经典类新式

    类变量与实例变量构造函数

    __author__ = 'meng'
    
    class Foo:
        #n = 12345 #类变量
        def __init__(self, name, age):
            # 构造函数
            # 在实例化时做一些类的初始化工作
            self.name = name #实例变量(静态属性),作用域就是实例本身
            self.age = age
        def shot(self): #类的方法功能(动态属性)
            print ('%s.......' %(self.name))
    
    obj = Foo('nick', 18) #实例化类 Foo,
    print (obj.name) #调用
    print (obj.age)
    print (obj.shot())
    obj2 = Foo('jenny', 21)
    print (obj2.name)
    print (obj2.age)
    

    私有方法

    一个python函数或类方法以两个下划线开始(不是结束),他是私有的,私有方法不能在类以外调用,只能在类内部调用。

    __author__ = 'meng'
    
    class Person:
        def __init__(self,name):
            self.name = name
            print (self.name)
        def __work(self,salary):
            print ("%s salary is: %d"%(self.name,salary))
        def worker(self):
            self.__work(500)        #在类内部调用私有方法
    if __name__=="__main__":
        officer = Person("Jack")
        #officer.__work(1000) #会报错
        officer.worker()
    

     继承 

    python3中的类都是新式类。

    继承的好处一:减少冗余代码

    在子类定义新的属性,覆盖掉父类的属性,称为派生。

    class Animal:
        def __init__(self, name, age, sex):
            self.name = name
            self.age = age
            self.sex = sex
    
        def eat(self):
            print('eating')
    
        def talk(self):
            print('%s 正在叫' %self.name)
    
    
    class People(Animal):
        def __init__(self, name, age, sex,education):
            Animal.__init__(self,name,age,sex)
            self.education=education
    
        def talk(self):
            Animal.talk(self)
            print('%s say hello' %self.name)
    
    class Pig(Animal):
        pass
    
    class Dog(Animal):
        pass
    
    
    peo1=People('alex',18,'male','小学肄业') #People.__init__
    
    pig1=Pig('wupeiqi',20,'female')
    
    dog1=Dog('yuanhao',30,'male')
    
    print(peo1.education)
    
    
    peo1.talk()
    pig1.talk()
    dog1.talk()
    
    输出结果:
    小学肄业
    alex 正在叫
    alex say hello
    wupeiqi 正在叫
    yuanhao 正在叫
    

     

    经典类:深度优先,F->D->B->A->E->C->H
    新式类:广度优先,F->D->B->E->C->H->A

     经典类深度优先:

    class A:
        def test(self):
            print('from A')
    
    
    class B(A):
        # def test(self):
        #     print('from B')
        pass
    class C(A):
        # def test(self):
        #     print('from C')
        pass
    
    class D(B):
        # def test(self):
        #     print('from D')
        pass
    
    class E(C):
        # def test(self):
        #     print('from E')
        pass
    class F(D,E):
        # def test(self):
        #     print('from F')
        pass
    f=F()
    f.test()
    
    输出结果:
    from A
    View Code

    新式类广度优先:

    class A:
        def test(self):
            print('from A')
        pass
    class B(A):
        # def test(self):
        #     print('from B')
        pass
    class C(A):
        # def test(self):
        #     print('from C')
        pass
    
    class D(B):
        # def test(self):
        #     print('from D')
        pass
    
    class E(C):
        # def test(self):
        #     print('from E')
        pass
    
    class H(A):
        # def test(self):
        #     print('from H')
        pass
    class F(D,E,H):
        # def test(self):
        #     print('from F')
        pass
    f=F()
    f.test()
    View Code

    子类调用父类的方法

    第一种方法不推荐,父类名字改变,子类也要跟着改。

    推荐第二种super(),python3中直接可以super().test()调用父类Foo1的test方法,python2中需要super(Bar,self).test()调用。

    多态与多态性

    多态:同一种事物的多种形态。

    class Animal:
    def talk(self):
    print('正在叫')


    class People(Animal): #动物的形态之一人
    def talk(self):
    print('say hello')

    class Pig(Animal): #动物的形态之一猪
    def talk(self):
    print('哼哼哼')

    class Dog(Animal): #动物的形态之一狗
      pass

    多态性:
    class Animal:
        def talk(self):
            print('正在叫')
    
    
    class People(Animal):
        def talk(self):
            print('say hello')
    
    class Pig(Animal):
        def talk(self):
            print('哼哼哼')
    
    class Dog(Animal):
        def talk(self):
            print('汪汪汪')
    
    
    class Cat(Animal):
        def talk(self):
            print('喵喵喵')
    
    peo1=People()
    pig1=Pig()
    dog1=Dog()
    cat1=Cat()
    
    
    #多态性
    
    # peo1.talk()
    # dog1.talk()
    # pig1.talk()
    
    def func(x):
        x.talk()
    
    
    func(peo1)
    func(pig1)
    func(dog1)
    func(cat1)
    
    输出结果:
    
    say hello
    哼哼哼
    汪汪汪
    喵喵喵
    

      

     

     

  • 相关阅读:
    逆序数
    Java处理对象
    Java8增强的包装类
    Java初始化块
    Linux- Linux软件配置
    Python- 【python无法更新pip】提示python.exe: No module named pip
    Error- Overloaded method value createDirectStream in error Spark Streaming打包报错
    Error- spark streaming 打包将全部依赖打进去Invalid signature file digest for Manifest main attributes
    Spark- Spark从SFTP中读取zip压缩文件数据做计算
    JAVA- 内部类及匿名内部类
  • 原文地址:https://www.cnblogs.com/menglingqian/p/6678616.html
Copyright © 2011-2022 走看看