• Python | 刷题笔记


    继承

    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())#子类的调用顺序

     

    爷爷给了零花钱....
    孩子有了零花钱.....
    [, , , ,

    初始化是广搜

    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()

    两者均可以使用类名和对象名打点调用函数

  • 相关阅读:
    人工智能 – Artificial intelligence | AI,是什么?
    Linux 软件包管理器 yum
    ImageJ软件使用教程(三):目标计数
    泰迪智能科技-2024年高校大数据人才培养探索模式
    关于读书伴我成长演讲稿格式及范例
    微信小程序开发的主要流程和部署以及遇到的大坑笔记
    C# 编写一个简单易用的 Windows 截屏增强工具
    Dynamics 365应用程序开发 7. 使用Web API开发应用程序
    Java#3(运算符)
    订阅号和服务号有什么区别
  • 原文地址:https://blog.csdn.net/kazuma_hn/article/details/139550197