十分钟学会Python中的单继承


面向对象的编程语言如果没有继承,类就没有意义。Python同样支持继承语法。

什么是父类和子类?

如果我们认为人类是一个父类,中国人就是一个子类;美国人是另一个子类。
如果我们认为中国人是一个父类,北京人就是一个子类;天津人是另一个子类。
如果我们认为外星人是一个父类,变形金刚就是一个子类;氪星人是另一个子类。
如果我们认为变形金刚是一个父类,汽车人就是一个子类;霸天虎是另一个子类。
如果我们认为超级英雄是一个父类,漫威英雄就是一个子类;DC英雄是另一个子类。
如果我们认为漫威英雄是一个父类,复仇者就是一个子类;自杀小队是另一个子类。

什么是继承?

与多态、封装共为面向对象的三个基本特征。 继承可以使得子类拥有父类的属性和方法;也可以重新定义、追加属性和方法。
首先我们创建一个父类

class Parent:
    name: str
    age: int

    def print_message(self):
        print("姓名:{} 年龄:{}".format(self.name, self.age))

然后创建一个子类继承这个类

# 通过()继承父类
class Child(Parent):
    id: str
    
    def print_id(self):
        print("ID:{}".format(self.id))

则Child类实际拥有三个字段 name age id 和两个自定义方法 print_message 和 print_id
通过继承,子类可以获得父类的属性和方法,此时父类称为父类(Parent Class)或超类(Super Class),子类称为子类(Child Class 或 Sub Class)。另一方面,子类可以创建属于自己的属性和方法,在强调这一过程时,继承也称作派生,父类称为基类(Bass Class),子类称为派生类(Derived class)。

什么是重写

虽然子类可以继承父类的方法,但是父类的方法不一定适合子类使用。如果父类的方法不适合子类的使用,子类可以声明一个同名方法,将父类的方法覆盖,这个过程称为【重写】。

class Parent:
    name: str
    age: int

    def print_message(self):
        print("姓名:{} 年龄:{}".format(self.name, self.age))


# 通过()继承父类
class Child(Parent):
    id: str

    def print_id(self):
        print("ID:{}".format(self.id))

    # 子类重写父类的同名方法
    def print_message(self):
        print("姓名:{} 年龄:{} ID:{}".format(self.name, 
						self.age, self.id))

调用父类的同名方法

当父类的同名方法不适合子类,子类可以重写这个方法。但是往往父类的同名方法并非完全无用,能够为子类方法计算出正确的结果提供帮助。这时候,子类在重写父类方法的时候,可以通过super关键字调用父类同名方法,完成一部分运算,再增添子类独有的运算。

class Parent:
    name: str
    age: int

    def print_message(self):
        print("姓名:{}\n年龄:{}".format(self.name, self.age))


# 通过()继承父类
class Child(Parent):
    id: str

    # 子类重写父类的同名方法,通过super调用父类同名方法
    def print_message(self):
		# 首先打印继承自父类的两个字段信息
        super().print_message()
		# 再打印子类派生的字段的信息
        print("ID:{}".format(self.id))

其他的重写?

class Parent:
    def __init__(self, name, age):
        self.__name = name
        self.__age = age

    @property
    def name(self):
        return self.__name
    
    @name.setter
    def name(self, value):
        self.__name = value

    def print_message(self):
        print("姓名:{}\n年龄:{}".format(self.__name, self.__age))
        
    @classmethod
    def print_class_name(cls):
        print("Parent")

    @staticmethod
    def print_class_type():
        print("Parent")


# 通过()继承父类
class Child(Parent):
    # 重写init方法
    def __init__(self, name, age, id_):
        super().__init__(name, age)
        self.__id = id_

    # 属性的重写
    @property
    def name(self):
        return self.__name[2: -3]

    @name.setter
    def name(self, value):
        self.__name = "[{}]".format(value)
    
    # 子类重写父类的同名方法,通过super调用父类同名方法
    def print_message(self):
        super().print_message()
        print("ID:{}".format(self.__id))
    
    # 类方法的重写
    @classmethod
    def print_class_name(cls):
        print("Parent")

    # 静态方法的重写
    @staticmethod
    def print_class_type():
        print("Parent")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值