Python | 刷题条记

饭宝  金牌会员 | 2024-6-13 19:53:28 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 712|帖子 712|积分 2136

继续

  1. class Father:
  2.     __secret="you are your own kid"
  3.     stroy="i'am a handsome boy..."
  4.     def  tellstory(self):
  5.         print("我的故事:",self.stroy)
  6.     def  __tellstory(self):
  7.         print("我的秘密:",Father.__secret)
  8. class Son(Father):
  9.     def tell(self):
  10.         Father._Father__tellstory(self)#调用父类的私有函数 父类名打点_父类名__私有函数名(self)
  11.         self.tellstory()
  12. s1=Son()
  13. s1.tell()
复制代码
覆盖+重写父类函数

  1. class Pet:
  2.     def  __init__(self,name):
  3.         self.name=name
  4.         print(f"一个名叫{self.name}的宠物出生了")
  5.     def eat(self):
  6.         print(f'{self.name}在吃东西...')
  7. class Dog(Pet):
  8.     def lookAfter(self):
  9.         print(f'{self.name}在看门')
  10.     def eat(self):
  11.         print(f'{self.name}在啃骨头')
  12. class Cat(Pet):
  13.     def __init__(self,name,age,sex):
  14.         super().__init__(name)#利用父类自带的函数初始化
  15.         self.age=age
  16.         self.sex=sex
  17.     def eat(self):
  18.         super().eat()#利用继承中的super()打点调用父类函数
  19.         print(f'{self.name}吃完东西后用唾液洗洗脸')
  20. c1=Cat("大橘",17,"女孩纸")
  21. c1.eat()
复制代码
多层继续

  1. class Father:
  2.     def getq(self):
  3.         print("father 爆金币")
  4. class Monther:
  5.     def getq(self):
  6.         print("monther 爆金币")
  7. class Child(Father,Monther):
  8.     def getq(self):
  9.         super().getq()
  10.         print("我有钱!")
  11. c1=Child()
  12. c1.getq()
复制代码
   father 爆金币
我有钱!

  
子类调用父类时,调用对象的顺序是深度优先

 
  1. class GrandFather:
  2.     def getMoney(self):
  3.         print("爷爷给了零花钱....")
  4. class Father(GrandFather):
  5.     pass
  6. class Mother:
  7.     def getMoney(self):
  8.         print("母亲给了零花钱....")
  9. # 继承Father和Mother
  10. class Child(Father, Mother):
  11.     def getMoney(self):
  12.         super().getMoney()
  13.         print("孩子有了零花钱.....")
  14. c1=Child()
  15. c1.getMoney()
  16. print(Child.mro())#子类的调用顺序
复制代码
 
   爷爷给了零花钱....
孩子有了零花钱.....
[<class '__main__.Child'>, <class '__main__.Father'>, <class '__main__.GrandFather'>, <class '__main__.Mother'>, <class 'object'>] 
  
初始化是广搜

  1. class Human():
  2.     def __init__(self):
  3.         print("人类...")
  4. class Father(Human):
  5.     def __init__(self):
  6.         print("父亲开始初始化...")
  7.         super().__init__()
  8.         print("父亲初始化结束...")
  9. class Monther(Human):
  10.     def __init__(self):
  11.         print("母亲开始初始化...")
  12.         super().__init__()
  13.         print("母亲初始化结束...")
  14. class Child(Father,Monther):
  15.     def __init__(self):
  16.         print("孩子开始初始化...")
  17.         super().__init__()
  18.         print("孩子初始化结束...")
  19. c1=Child()
复制代码
   孩子开始初始化...
父亲开始初始化...
母亲开始初始化...
人类...
母亲初始化结束...
父亲初始化结束...
孩子初始化结束...
  
多态

   这里传入的是v,在调用animallEating时需要调用eating对象
而venusFlaytrap类也具有对象eating,在python中可以直接调用
即便两个类之间没有继续关系,也可以调用

  1. class Animal:
  2.     def eating(self):
  3.         print("动物下在吃东西.....")
  4. class Pet(Animal):
  5.     def eating(self):
  6.         print("宠物在吃东西.....")
  7. class Dog(Pet):
  8.     def eating(self):
  9.         print("狗在啃骨头.....")
  10. class Cat(Pet):
  11.     def eating(self):
  12.         print("猫在吃鱼....")
  13. class Zoo:
  14.     def animallEating(self, animal):
  15.         if isinstance(animal, Animal):
  16.             print("这是展示动物吃东西的地方:")
  17.         else:
  18.             print("这是非动物吃饭的展示")
  19.         animal.eating()
  20. class venusFlytrap:
  21.     def eating(self):
  22.         print("捕蝇草在吃小虫子.....")
  23. v = venusFlytrap()
  24. z = Zoo()
  25. # z是Zoo类但是可以调用venusFlytrap类的对象
  26. z.animallEating(v)
复制代码
 type isinstance异同

   isinstance 会判断父类
  type条件较为严格
   
  1. c=Cat()
  2. #判断类型时,只看直接类型
  3. #type是严格满足类型
  4. print(type(c) is Cat) #True
  5. print(type(c) is Animal) #False
  6. print(type(c) is Pet) #False
  7. #isinstance 判断对象是否为一个类型的实例
  8. # 判断实例类型时,涵盖父类的类型
  9. print("*"*30)
  10. print(isinstance(c,Cat)) #True
  11. print(isinstance(c,Pet)) #True
  12. print(isinstance(c,Animal)) #True
  13. print(isinstance(v,Animal)) #False
复制代码

静态方法和类方法

Python——类方法和静态方法_python类方法和静态方法-CSDN博客 
静态:(打印或者是绘图)不需要创建对象的时间可以使用

  1. # 静态方法:用@staticmethod装饰的不带self参数的方法叫做静态方法
  2. #        类的静态方法可以没有参数,可以直接使用类调用
  3. class Dog:
  4.     @staticmethod
  5.     def bark():#这里没有self
  6.         print("wangwang!")
  7. d = Dog()
  8. d.bark()
  9. Dog.bark()
复制代码
  静态方法不能通过self和类名访问成员变量 
  类方法:

  1. class Dog:
  2.     legs = 4
  3.     teeth = 42
  4.     # 类方法
  5.     @classmethod
  6.     def printInfo(cls):
  7.         print(f"狗有{cls.legs}条腿,{cls.teeth}颗牙齿")
  8. d = Dog()
  9. d.printInfo()
  10. Dog.printInfo()
复制代码
  两者均可以使用类名和对象名办理调用函数
  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

饭宝

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表