Python之构造方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

猜你喜欢

转载自blog.csdn.net/cadi2011/article/details/84798766
今日推荐