ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python知识点——构造函数

2019-08-06 22:03:09  阅读:185  来源: 互联网

标签:__ 知识点 构造方法 python self init print class 构造函数


构造函数

python 中的构造函数是__init__()函数。用于类的实例化,当一个对象被创建时,就会立刻被调用,有且只能执行一次。

class A():
def __init__(self):
print("A1")

执行:a=A()
输出: A1

1.构造函数可以不写,不写时会调用默认的构造函数:


class A():
pass

执行:a = A()
输出:

2.构造函数可以传入参数,在初始化时需要赋值,否则会报错。可以赋值默认值。

class A():
def __init__(self,name):
print(name)

执行:a=A(“A2”)
输出:A2

重写构造方法

1.当父类有构造方法,子类不重写构造方法时:

class A():
    def __init__(self):
        print("A1")
class B(A):
    pass

执行:b = B()
输出:A1

2.当父类构造方法有参数时,子类不重写构造方法时:程序会报错

class A():
    def __init__(self,name):
        print(name)
class B(A):
    pass

执行:b = B()
报错

3.当子类重写父类的构造方法时,父类的构造方法不再默认的被调用。

class A():
    def __init__(self):
        print("A1")
class B(A):
    def __init__(self):
        print("B1")

执行:b = B()
输出:B1

4.当需要父类的构造方法时:

class A():
    def __init__(self):
        print("A1")
class B(A):
    def __init__(self):
        super().__init__()           # 方法一
        # super(B,self).__init__()   # 方法二
        # A.__init__(self)           # 方法三  
        print("B1")

b = B()
输出:A1,B1

方法一,二,三都可以调用父类的构造方法。最常用的还是方法一。
当父类的构造方法含有参数时,需要在方法一,二,三中的__init__(参数1,参数2…)传递参数

5.当多继承时,会调用哪个父类的构造方法呢?
python的有个对父类的执行顺序c3算法,可调用mro()方法查看

class A():
    def __init__(self):
        print("A1")
class C():
    def __init__(self):
        print("C1")
class B(A,C):
    def __init__(self):
        super().__init__()           # 方法一
        # super(B,self).__init__()   # 方法二
        # A.__init__(self)           # 方法三
        print("B1")

执行:b = B()
执行:print(B.mro())
输出:A1,B1
输出:[<class ‘main.B’>, <class ‘main.A’>, <class ‘main.C’>, <class ‘object’>]

标签:__,知识点,构造方法,python,self,init,print,class,构造函数
来源: https://blog.csdn.net/qq_39489231/article/details/98661104

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有