方法一:父類.__init__(self,...)調用,self不能省略,否則報錯
#coding=utf-8
class family(object):
def __init__(self,host):
self.host = host
def printf(self):
print('the hoster of the family is %s.'%self.host)
class myfamily(family):
member = []
def __init__(self):
family.__init__(self,host = 'xiaoli')
#注意self必須有,否則報錯
print('hi')
def add_member(self,member):
self.member.append(member)
def print_member(self):
print("there are %d member : %s"%(len(self.member),self.member))
m = myfamily()
輸出結果:
r@r-Sys:~/python/now/review2$ python3 call_father1.py
hi
如果不加self,那麼會出現如下報錯信息:
r@r-Sys:~/python/now/review2$ python3 call_father1.py
Traceback (most recent call last):
File "call_father1.py", line 17, in <module>
m = myfamily()
File "call_father1.py", line 10, in __init__
family.__init__(host = 'xiaoli')
TypeError: __init__() missing 1 required positional argument: 'self'
方法二:在子類初始化方法中,通過super()函數來調用父類(超類)的初始化方法,代碼如下,
#coding=utf-8
class family(object):
def __init__(self,host):
self.host = host
def printf(self):
print('the hoster of the family is %s.'%self.host)
class myfamily(family):
member = []
def __init__(self):
super(myfamily,self).__init__(host = 'xiaoli')
#baohanself
print('hi')
def add_member(self,member):
self.member.append(member)
def print_member(self):
print("there are %d member : %s"%(len(self.member),self.member))
m = myfamily()
python3:子類調用父類構造函數的兩種方法:
第一種方法:
class People:
def __init__(self, name, age):
self.name = name
self.age = age
class Student(People):
def __init__(self, name, age, grade):
super().__init__(name, age)
self.grade = grade
super().__init__(父類構造函數需要的參數,不包括self)
第二種方法:
父類.__init__(self,父類構造函數需要的參數)
class People:
def __init__(self, name, age):
self.name = name
self.age = age
class Student(People):
def __init__(self, name, age, grade):
People.__init__(self, name, age)
self.grade = grade
這種方法需要將self作爲參數傳遞。