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参数要和父类的一样。