python中的继承

要理解继承首先要有父类子类的概念,可以理解成子类从父类中继承父类的属性和方法

创建父类

python 复制代码
class Pet:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def jump(self):
        print(self.name+"在跳")

创建子类

python 复制代码
class Cat(Pet):
    pass
mycat=Cat("白白",2)
print(mycat.jump())

如果您不想向该类添加任何其他属性或方法,就使用 pass 关键字。

现在,Cat 类拥有与 Pet 类相同的属性和方法。

为子类添加新的属性或方法

python 复制代码
class Pet:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def jump(self):
        return(self.name+"在跳")
class Cat(Pet):
    def miao(self):
        return(self.name+"在叫")
    def jump(self):
        return(self.name+"在跳个不停")
mycat=Cat("白白",2)
print(mycat.jump())
print(mycat.miao())

当子类调用函数时,会先在自身寻找,如果没有就去父类寻找,所以当我们有定义了一遍jump后不会再调用父类里的jump,同时我们也可以定义自己专属的函数,

此时有个问题,如果我要在__init__里新增属性怎么办呢,比如猫我想让他有花纹,而狗我不想让他有花纹,self.pattern=Trueself.pattern=False该怎么办

如果我们像刚刚一样,去新写一个__init__,就只能把原来的name和age再写一遍,因为调用子类的__init__后父类的是不会调用的

此时就引出了super 方法

super方法

super会返回当前类的父类

python 复制代码
class Pet:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def jump(self):
        return(self.name+"在跳")
class Cat(Pet):
    def __init__(self,name,age):
        super().__init__(name,age)
        self.pattern=True
class Dog(Pet):
    def __init__(self,name,age):
        super().__init__(name,age)
        self.pattern=False
mycat=Cat("miao",2)
mydog=Dog("woof",3)
print(mycat.pattern)
print(mydog.pattern)
print(mycat.age)
print(mydog.age)

这里有两点要注意

  1. 子类里的__init__里的参数要包含父类的参数,这样子后面才能super().__init__(name,age),否则会报错
  2. 这样子把要新添的参数放入函数的形参里也是没有问题的,还可以设定初始值
python 复制代码
class Cat(Pet):
    def __init__(self, name, age, pattern=True):
        super().__init__(name, age)
        self.pattern = pattern
相关推荐
满怀1015几秒前
Python入门(5):异常处理
开发语言·python
莓事哒1 分钟前
使用pytesseract和Cookie登录古诗文网~(python爬虫)
爬虫·python·pycharm·cookie·pytessarct
攀小黑4 分钟前
Java 多线程加锁 synchronized 关键字 字符串当做key
java·开发语言
赵钰老师5 分钟前
【Deepseek、ChatGPT】智能气候前沿:AI Agent结合机器学习与深度学习在全球气候变化驱动因素预测中的应用
人工智能·python·深度学习·机器学习·数据分析
每次的天空13 分钟前
Kotlin 作用域函数:apply、let、run、with、also
android·开发语言·kotlin
小林熬夜学编程17 分钟前
【高并发内存池】第八弹---脱离new的定长内存池与多线程malloc测试
c语言·开发语言·数据结构·c++·算法·哈希算法
独好紫罗兰28 分钟前
洛谷题单3-P1980 [NOIP 2013 普及组] 计数问题-python-流程图重构
开发语言·python·算法
freejackman31 分钟前
Selenium框架——Web自动化测试
python·selenium·测试
独好紫罗兰33 分钟前
洛谷题单3-P1009 [NOIP 1998 普及组] 阶乘之和-python-流程图重构
开发语言·python·算法
Taichi呀34 分钟前
PHP语言基础
android·开发语言·php