Python | 刷题笔记

继承

python 复制代码
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()

覆盖+重写父类函数

python 复制代码
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()

多层继承

python 复制代码
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 爆金币
我有钱!

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

python 复制代码
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())#子类的调用顺序

爷爷给了零花钱....

孩子有了零花钱.....

\, \, \, \, \

初始化是广搜

python 复制代码
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中可以直接调用
即便两个类之间没有继承关系,也可以调用

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条件较为严格

python 复制代码
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博客

静态:(打印或者是绘图)不需要创建对象的时候可以使用

python 复制代码
# 静态方法:用@staticmethod装饰的不带self参数的方法叫做静态方法
#        类的静态方法可以没有参数,可以直接使用类调用

class Dog:
    @staticmethod
    def bark():#这里没有self
        print("wangwang!")


d = Dog()
d.bark()
Dog.bark()

静态方法不能通过self和类名访问成员变量

类方法:

python 复制代码
class Dog:
    legs = 4
    teeth = 42

    # 类方法
    @classmethod
    def printInfo(cls):
        print(f"狗有{cls.legs}条腿,{cls.teeth}颗牙齿")


d = Dog()
d.printInfo()
Dog.printInfo()

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

相关推荐
吴秋霖15 分钟前
【某音电商】protobuf聊天协议逆向
python·算法·protobuf
深藏功yu名16 分钟前
Day24:向量数据库 Chroma_FAISS 入门
数据库·人工智能·python·ai·agent·faiss·chroma
cm6543201 小时前
用Python破解简单的替换密码
jvm·数据库·python
wan9yu1 小时前
为什么你需要给 LLM 的数据"加密"而不是"脱敏"?我写了一个开源工具
python
摇滚侠1 小时前
你是一名 java 程序员,总结定义数组的方式
java·开发语言·python
这个名有人用不2 小时前
解决 uv 虚拟环境使用 pip 命令提示command not found的办法
python·pip·uv·claude code
Oueii2 小时前
掌握Python魔法方法(Magic Methods)
jvm·数据库·python
2501_908329852 小时前
使用Python自动收发邮件
jvm·数据库·python
2501_908329853 小时前
NumPy入门:高性能科学计算的基础
jvm·数据库·python