版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cadi2011/article/details/84798766
1、先看下语法,可以看到构造方法是固定的__init__命名的,self代表当前对象
def __init__(self):
pass
2、在python中以 __函数名__,就是这样的双下划线,在函数前、在函数后都有的,是python中的特殊方法的标识符
3、python中的构造方法可不是自动调用的,比如子类Son、父类Father,如果子类Son没有显式的调用Father的构造方法,那就不会调用的
class Father(object):
def __init__(self):
self.name = "wang da ye"
class Son(Father):
def __init__(self):
self.age = 25
def print_my_father_name(self):
print self.name
son = Son()
son.print_my_father_name()
输出结果(报错,因为没有显式的调用父类的构造构造方法:
AttributeError: 'Son' object has no attribute 'name'
4、如果解决上面的问题,涉及到子类如何调用父类的构造方法
解决办法1: 使用 父类.__init__(self),即可
def __init__(self):
Father.__init__(self)
self.age = 25
解决办法2:使用super函数(),并向其传入子类、及当前实例对象,然后直接调用__init__()方法
def __init__(self):
super(Son, self).__init__()
self.age = 25
5、当然,如果是一个class中的构造方法,当然是在创建对象的时候,自动调用的
class Father(object):
def __init__(self):
self.name = "wang da ye"
print self.name
father = Father()
PS:当father = Father()执行的时候,除了def、class开头的,其他在模块中没有缩进的语句,会被自动执行
6、在python世界中,你还可以显式的调用__inint__(self),这点别家还真没有
如下
class Father(object):
def __init__(self):
self.name = "wang da ye"
print self.name
def print_double_name(self):
self.__init__()
father = Father()
father.print_double_name()
输出结果:
wang da ye
wang da ye