python中的__init__

本文详细介绍了Python中的构造函数__init__(),以及它在类实例化时的作用。通过示例展示了如何在子类中调用父类的构造函数,强调了不显式调用时__init__()不会被继承。同时,提供了两种调用父类构造函数的方法:直接调用父类的__init__()方法和使用super()函数。最后,通过实际代码运行结果对比,证明了两种方法的正确性和子类继承父类成员的特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

__init__() 是类中特殊的类实例方法,功能为构造函数,在创建类的实例对象时被自动调用。

__init__(self, 参数)  在对象实例化时需要输入相应的参数值。

class MyClass(object):
    def __init__(self, value1, value2):
        self.value1 = value1
        self.value2 = value2

f = MyClass(2,5)
print(f.value1)
print(f.value2)

输出结果:

2
5

构造函数无法继承。

class MyClass(object):
    def __init__(self, value1, value2):
        self.value1 = value1
        self.value2 = value2
    def setvalue(self,value3):
        self.value3 = value3

class SubMyClass(MyClass):
    def __init__(self,value1, value2):
        self.value3 = 10
    def getvalue(self):
        print(self.value3)

f = SubMyClass(1,2)
f.getvalue()
f.setvalue(2)
print(f.value3)
print(f.value2)

 输出结果:

AttributeError: 'SubMyClass' object has no attribute 'value2'
10
2

value3的值有变化,说明父类MyClass中的setvalue()方法可以被继承,但是f实例中没有value2,说明__init__()方法不被子类继承

若需要在子类中调用父类的构造函数,则需要在子类构造函数中绑定父类构造函数或是使用super调用父类中的构造函数,

两种方法:

class MyClass(object):
    def __init__(self, value1, value2):
        self.value1 = value1
        self.value2 = value2
    def setvalue(self,value3):
        self.value3 = value3

class SubMyClass(MyClass):
    def __init__(self,value1, value2):
        self.value3 = 10
        MyClass.__init__(self, value1,value2) #添加
    def getvalue(self):
        print(self.value3)

f = SubMyClass(1,2)
f.getvalue()
f.setvalue(2)
print(f.value3)
print(f.value2)

输出结果:

10
2
2

另一种方法是使用Python中的内置函数super()

class MyClass(object):
    def __init__(self, value1, value2):
        self.value1 = value1
        self.value2 = value2
    def setvalue(self,value3):
        self.value3 = value3

class SubMyClass(MyClass):
    def __init__(self,value1, value2):
        self.value3 = 10
        super().__init__(value1,value2)  #另一种方法
        # MyClass.__init__(self, value1,value2)
    def getvalue(self):
        print(self.value3)

f = SubMyClass(1,2)
f.getvalue()
f.setvalue(2)
print(f.value3)
print(f.value2)

结果同上。

对于两种方法的选择,在多重继承和多个超类时有较大区别,具体参考https://blog.youkuaiyun.com/weixin_41798111/article/details/117633137

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值