Yug*_*amo 70 python inheritance init
我是python的初学者.我无法理解继承和__init__().
class Num:
def __init__(self,num):
self.n1 = num
class Num2(Num):
def show(self):
print self.n1
mynumber = Num2(8)
mynumber.show()
Run Code Online (Sandbox Code Playgroud)
结果: 8
还行吧.但我换成Num2了
class Num2(Num):
def __init__(self,num):
self.n2 = num*2
def show(self):
print self.n1,self.n2
Run Code Online (Sandbox Code Playgroud)
结果: Error. Num2 has no attribute "n1".
在这种情况下,如何Num2访问n1?
Mar*_*rte 114
在第一种情况下,Num2是扩展类Num,因为你没有重新定义名为__init__()in 的特殊方法Num2,所以它继承自Num.
当类定义
__init__()方法时,类实例化会自动调用__init__()新创建的类实例.
在第二种情况下,由于您正在重新定义__init__(),因此如果要扩展其行为,则需要Num2在超类(Num)中显式调用该类.
class Num2(Num):
def __init__(self,num):
Num.__init__(self,num)
self.n2 = num*2
Run Code Online (Sandbox Code Playgroud)
Mau*_*cco 25
当您覆盖init时,您还必须调用父类的init
super(Num2, self).__init__(num)
Run Code Online (Sandbox Code Playgroud)
使用__init __()方法理解Python super()
小智 10
Num2 类中的一个简单更改,如下所示:
super().__init__(num)
Run Code Online (Sandbox Code Playgroud)
它适用于python3。
class Num:
def __init__(self,num):
self.n1 = num
class Num2(Num):
def __init__(self,num):
super().__init__(num)
self.n2 = num*2
def show(self):
print (self.n1,self.n2)
mynumber = Num2(8)
mynumber.show()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
82406 次 |
| 最近记录: |