python之类与继承

一、概念:

       在面向对象的世界中,子类从父类上继承父类,就可以直接拥有父类原有的属性和方法,这样可以减少代码的冗余,可实现复用的效果。子类也可以重新定义属于自己的属性和方法。

二、类的表达式:

子类可以继承父类

父类有的,子类继承后,都可以直接拿来使用

可以继承:非私有属性和非私有方法,可以理解为财产/资源/人脉

不可以继承:私有属性和私有方法,可以理解为媳妇/私房钱 是私有化的东西

class Father:
    name = "小明"  # 父类的属性
    def hobby(self):   # 父类的方法
        print("打篮球")
class Son(Father):
    def swim(self):  # 子类的方法
        print("游泳")
s = Son()
print(s.name)  # 子类继承了父类的属性,输出为小明
s.hobby()  # 子类继承了父类的hobby方法,输出为打篮球
s.swim()  #子类自己的方法,输出为游泳

三、重写:

子类里新增的方法跟父类的方法名一样时,会代替父类的方法

子类里面的函数名与父类函数名重复的时候,优先调用子类的函数

class Father:
    def hobby(self):
        print("打篮球")
class Son(Father):
    def hobby(self):
        print("看电视")
s = Son()
s.hobby()  # 子类重写了父类的hobby方法,输出为看电视

四、拓展:子类新增的函数(父类并没有的)

class Father:
    def hobby(self):
        print("打篮球")
class Son(Father):
    def study(self):
        print("学习")
s = Son()
s.study()  # 子类继承了父类,拓展了study的方法,输出为学习

五、多继承:

继承多个父类 具有两个父类的属性和方法 如果两个父类具有同名方法的时候 就近原则

class Father_1:
    def hobby(self):
        print("打篮球")
class Father_2:
    def study(self):
        print("学习")
class Son(Father_1,Father_2):
    pass
s = Son()
s.hobby()  # 子类继承了Father_1的hobby方法,输出为打篮球
s.study()  # 子类同时也继承了Father_2的study方法,输出为打篮球

六、超继承:

子类重写了父类的方法,但是子类还想用之前被重写之前父类的方法,就可以使用超继承。这是一种贪婪的继承。

class Father:
    def hobby(self):
        print("打篮球")
class Son(Father):
    def hobby(self):
        super(Son, self).hobby()   # 超继承,能继承父类同名的方法
        print("学习")
s = Son()
s.hobby()  #输出为打篮球 学习

七、初始化函数(构建函数)

Python中的构造函数的表达式为__init__函数。在Python中,子类如果定义了构造函数,而没有调用父类的,那么Python不会自动调用,也就是说父类的构造函数不会执行。如果父类有构造函数的话,子类就不能重新定义属于他自己的构造函数。

class Father:
    def __init__(self, name):
        self.name = name
class Son(Father):
    def call_name(self):
        print(self.name)
s = Son("小明")
s.call_name()  # 子类继承了父类的构造函数,输出为小明

八、类的私有属性和方法:

私有属性和方法是只提供类自己调用的,相当于内部可使用,对于子类和其他类都不能调用。

私有属性分为:

1 _属性/_方法 子类可以继承父类的浅度私有属性和方法,浅度私有是可被其他调用的

class Father:
    _name = "小明"  # 浅度私有name属性
class Son(Father):
    pass
s = Son()
print(s._name)  #输出为小明

2 __属性/__方法 子类不可以继承父类的深度私有属性和方法,深度私有是不可以被其他调用

class Father:
    __name = "小明"  # 深度私有name属性
class Son(Father):
    pass
s = Son()
print(s.__name)
# 输出报错 AttributeError: 'Son' object has no attribute '__name'

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值