继续
- class Father:
- __secret="you are your own kid"
- stroy="i'am a handsome boy..."
- def tellstory(self):
- print("我的故事:",self.stroy)
- def __tellstory(self):
- print("我的秘密:",Father.__secret)
- class Son(Father):
- def tell(self):
- Father._Father__tellstory(self)#调用父类的私有函数 父类名打点_父类名__私有函数名(self)
- self.tellstory()
- s1=Son()
- s1.tell()
复制代码 覆盖+重写父类函数
- class Pet:
- def __init__(self,name):
- self.name=name
- print(f"一个名叫{self.name}的宠物出生了")
- def eat(self):
- print(f'{self.name}在吃东西...')
- class Dog(Pet):
- def lookAfter(self):
- print(f'{self.name}在看门')
- def eat(self):
- print(f'{self.name}在啃骨头')
- class Cat(Pet):
- def __init__(self,name,age,sex):
- super().__init__(name)#利用父类自带的函数初始化
- self.age=age
- self.sex=sex
- def eat(self):
- super().eat()#利用继承中的super()打点调用父类函数
- print(f'{self.name}吃完东西后用唾液洗洗脸')
- c1=Cat("大橘",17,"女孩纸")
- c1.eat()
复制代码 多层继续
- class Father:
- def getq(self):
- print("father 爆金币")
- class Monther:
- def getq(self):
- print("monther 爆金币")
- class Child(Father,Monther):
- def getq(self):
- super().getq()
- print("我有钱!")
- c1=Child()
- c1.getq()
复制代码 father 爆金币
我有钱!
子类调用父类时,调用对象的顺序是深度优先
- class GrandFather:
- def getMoney(self):
- print("爷爷给了零花钱....")
- class Father(GrandFather):
- pass
- class Mother:
- def getMoney(self):
- print("母亲给了零花钱....")
- # 继承Father和Mother
- class Child(Father, Mother):
- def getMoney(self):
- super().getMoney()
- print("孩子有了零花钱.....")
- c1=Child()
- c1.getMoney()
- print(Child.mro())#子类的调用顺序
复制代码
爷爷给了零花钱....
孩子有了零花钱.....
[<class '__main__.Child'>, <class '__main__.Father'>, <class '__main__.GrandFather'>, <class '__main__.Mother'>, <class 'object'>]
初始化是广搜
- class Human():
- def __init__(self):
- print("人类...")
- class Father(Human):
- def __init__(self):
- print("父亲开始初始化...")
- super().__init__()
- print("父亲初始化结束...")
- class Monther(Human):
- def __init__(self):
- print("母亲开始初始化...")
- super().__init__()
- print("母亲初始化结束...")
- class Child(Father,Monther):
- def __init__(self):
- print("孩子开始初始化...")
- super().__init__()
- print("孩子初始化结束...")
- c1=Child()
复制代码 孩子开始初始化...
父亲开始初始化...
母亲开始初始化...
人类...
母亲初始化结束...
父亲初始化结束...
孩子初始化结束...
多态
这里传入的是v,在调用animallEating时需要调用eating对象
而venusFlaytrap类也具有对象eating,在python中可以直接调用
即便两个类之间没有继续关系,也可以调用
- class Animal:
- def eating(self):
- print("动物下在吃东西.....")
- class Pet(Animal):
- def eating(self):
- print("宠物在吃东西.....")
- class Dog(Pet):
- def eating(self):
- print("狗在啃骨头.....")
- class Cat(Pet):
- def eating(self):
- print("猫在吃鱼....")
- class Zoo:
- def animallEating(self, animal):
- if isinstance(animal, Animal):
- print("这是展示动物吃东西的地方:")
- else:
- print("这是非动物吃饭的展示")
- animal.eating()
- class venusFlytrap:
- def eating(self):
- print("捕蝇草在吃小虫子.....")
- v = venusFlytrap()
- z = Zoo()
- # z是Zoo类但是可以调用venusFlytrap类的对象
- z.animallEating(v)
复制代码 type isinstance异同
isinstance 会判断父类
type条件较为严格
- c=Cat()
- #判断类型时,只看直接类型
- #type是严格满足类型
- print(type(c) is Cat) #True
- print(type(c) is Animal) #False
- print(type(c) is Pet) #False
- #isinstance 判断对象是否为一个类型的实例
- # 判断实例类型时,涵盖父类的类型
- print("*"*30)
- print(isinstance(c,Cat)) #True
- print(isinstance(c,Pet)) #True
- print(isinstance(c,Animal)) #True
- print(isinstance(v,Animal)) #False
复制代码
静态方法和类方法
Python——类方法和静态方法_python类方法和静态方法-CSDN博客
静态:(打印或者是绘图)不需要创建对象的时间可以使用
- # 静态方法:用@staticmethod装饰的不带self参数的方法叫做静态方法
- # 类的静态方法可以没有参数,可以直接使用类调用
- class Dog:
- @staticmethod
- def bark():#这里没有self
- print("wangwang!")
- d = Dog()
- d.bark()
- Dog.bark()
复制代码 静态方法不能通过self和类名访问成员变量
类方法:
- class Dog:
- legs = 4
- teeth = 42
- # 类方法
- @classmethod
- def printInfo(cls):
- print(f"狗有{cls.legs}条腿,{cls.teeth}颗牙齿")
- d = Dog()
- d.printInfo()
- Dog.printInfo()
复制代码 两者均可以使用类名和对象名办理调用函数
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |