Python基础语法之——继承

Python中继承的特点

  • 继承中父类的构造函数不会被自动调用,其需要子类在其自己的构造函数中亲自调用。
#Filenaame: BaseModel.py
# 注意模块名最好和类名取不一样的名字
class BaseClass:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        print('baseclass is inited')
    def speak(self, sth):
        print('baseclass is speak :%s'%sth)

if __name__ == '__main__':
    b = BaseClass('yuanCruise',23)
    b.speak('PG one')

  • 在调用父类的方法时,需要加上父类的类名前缀,且需要带上self参数变量。
import BaseModel
# 该处调用时需要利用 【文件名.类名】
class SubClass(BaseModel.BaseClass):
    def __init__(self, name, age, salary):
        #调用父类的构造函数,如上述所说的注意点
        BaseModel.BaseClass.__init__(self, name, age)
        self.salary = salary
        print('SubClass is inited and the salary:%s'%self.salary)
    def talk(self, sth):
        print('In SubClass %s is saying %s'%(self.name, sth))
        # 调用父类的方法,如上述所说的注意点
        BaseModel.BaseClass.speak(self, sth)
if __name__ == '__main__':
    s = SubClass('yuanCruise', 23, 10)
    s.talk('JYM')
  • 如果子类中没有定义构造函数,则会自动继承父类的构造函数中的属性
import BaseModel
# 该处调用时需要利用 【文件名.类名】
class SubClass(BaseModel.BaseClass):
    #def __init__(self, name, age, salary):
        #调用父类的构造函数,如上述所说的注意点
        #BaseModel.BaseClass.__init__(self, name, age)
        #self.salary = salary
        #print('SubClass is inited and the salary:%s'%self.salary)
    def talk(self, sth):
        print('In SubClass %s is saying%s, his age is: %s'%(self.name, sth, self.age))
        # 调用父类的方法,如上述所说的注意点
        BaseModel.BaseClass.speak(self, sth)
if __name__ == '__main__':
    #s = SubClass('yuanCruise', 23, 10)
    # 但构造函数的参数一定要输入正确
    s = SubClass('yuanCruise', 23)
    s.talk('JYM')


COMMEND:
Traceback (most recent call last):
  File "C:/Software/pycharm/myPython35_code/daily_code/item1/SubModel.py", line 14, in <module>
    s = SubClass('yuanCruise', 23, 10)
TypeError: __init__() takes 3 positional arguments but 4 were given
  • 以子类的名义调用函数方法,则调用的过程中先在子类中寻找,若没找到则再去父类中寻找该对应的方法
import BaseModel
# 该处调用时需要利用 【文件名.类名】
class SubClass(BaseModel.BaseClass):
    #def __init__(self, name, age, salary):
        #调用父类的构造函数,如上述所说的注意点
        #BaseModel.BaseClass.__init__(self, name, age)
        #self.salary = salary
        #print('SubClass is inited and the salary:%s'%self.salary)
    def talk(self, sth):
        print('In SubClass %s is saying%s, his age is: %s'%(self.name, sth, self.age))
        # 调用父类的方法,如上述所说的注意点
        BaseModel.BaseClass.speak(self, sth)
if __name__ == '__main__':
    #s = SubClass('yuanCruise', 23, 10)
    s = SubClass('yuanCruise', 23)
    s.talk('JYM')
    # 该方法虽然以子类的名义调用,但在子类中未找到该方法所以从父类中寻找并调用
    s.speak('PG one')

COMMEND:
baseclass is inited
In SubClass yuanCruise is sayingJYM, his age is: 23
baseclass is speak :JYM
baseclass is speak :PG one

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuanCruise

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值