python 重写构造方法 super()

本文深入探讨了Python中使用super()函数正确初始化继承类的方法,特别是当父类构造函数包含参数时的情形。通过具体实例,展示了如何避免常见错误,并正确地在子类中调用父类的初始化方法。

python关于super()含参数的初始化构造方法

@(python构造方法)[super|init]


构造方法

Python 的构造方法是和 java 的构造函数很类似,在子类继承父类的时候,子类如果也有一个构造函数,需要用super()函数来调用父类的构造方法,确保正确的初始化。Python也提供的是super()函数来绑定父类的构造方法,除了super()函数,python还有一种调用超类构造方法的未绑定版本

这里也踩了坑,因为就是网上很多介绍的都是父类没有初始化参数。这里主要介绍父类初始化含有参数的问题。

调用超类构造方法的未绑定方法

#用super()方法的时候父类一定要记得继承object,这个一定要写,否#则会出错。
class People():
    def __init__(self, name, age,gender):
        self.name = name
        self.age = age
        self.gender=gender
    def walk(self):
        print('%s is walking' % self.name)
    def test(self):
        print('test class from father class %s' %self.name)


#定义Teacher子类
class Teacher(People):
    school = 'jialidun'
    def __init__(self, name, age, gender, level, salary):
        #原始的方法,推荐super()方法来写。
        People.__init__(self,name,age,gender)
        self.level = level
        self.salary = salary
    def teach(self):
        print('%s is teaching' %self.name)
    def test(self):   
        People.test(self)
        print('from teacher')

# 测试部分
t = Teacher("bruce",23,"male","teacher",30000)
t.walk()
t.teach()
t.test()

super()函数绑定父类

#父类一定要写继承(object),否则会报错。
class People(object):
    def __init__(self, name, age,gender):
        self.name = name
        self.age = age
        self.gender=gender
    def walk(self):
        print('%s is walking' % self.name)
    def test(self):
        print('test class from father class %s' %self.name)


#定义Teacher子类
class Teacher(People):
    school = 'jialidun'
    def __init__(self, name, age, gender, level, salary):
        #super写和父类相同的属性。   
        super(Teacher, self).__init__(name,age,gender)        
        self.level = level
        self.salary = salary
    def teach(self):
        print('%s is teaching' %self.name)
    def test(self):   
        People.test(self)
        print('from teacher')




# 测试部分
t = Teacher("bruce",23,"male","teacher",30000)
t.walk()
t.teach()
t.test()

不含参数的构造方法简单,这里不做介绍,主要是用super方法的时候有几个点需要注意,一是父类必须继承object二是子类构造方法super参数要和父类的一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值