重写和扩展Python中父类中定义的方法
我想在重写和扩展Python中父类中定义的方法,python,class,overriding,Python,Class,Overriding,我想在New.do(self,x)中重新定义方法Old.do(self),以便它采用一个参数,如下所示: #/usr/bin/env蟒蛇3 旧类(对象): 定义初始化(自): self.a=0 self.do() def do(自我): 打印(self.a) 新(旧)类: 定义初始化(自): 旧的。初始的(自我) b=1 self.do(b) def do(自我,b): 打印(自我a+b) 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': new=new()
New.do(self,x)
中重新定义方法Old.do(self)
,以便它采用一个参数,如下所示:
#/usr/bin/env蟒蛇3
旧类(对象):
定义初始化(自):
self.a=0
self.do()
def do(自我):
打印(self.a)
新(旧)类:
定义初始化(自):
旧的。初始的(自我)
b=1
self.do(b)
def do(自我,b):
打印(自我a+b)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
new=new()
我可以通过以下方式完成:
#/usr/bin/env蟒蛇3
旧类(对象):
定义初始化(自):
self.a=0
赛尔夫
def do(自我):
打印(self.a)
__do=do
新(旧)类:
定义初始化(自):
旧的。初始的(自我)
b=1
self.do(b)
def do(自我,b):
打印(自我a+b)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
new=new()
或者我可以通过对基类的显式引用来实现:
#/usr/bin/env蟒蛇3
旧类(对象):
定义初始化(自):
self.a=0
老。做(自己)
def do(自我):
打印(self.a)
新(旧)类:
定义初始化(自):
旧的。初始的(自我)
b=1
self.do(b)
def do(自我,b):
打印(自我a+b)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
new=new()
有没有其他方法可以得到同样的结果?你能做到吗
谢谢你可以用super做你想做的事,比如:
class Old(object):
def __init__(self):
self.a = 1
Old.do(self, self.a)
def do(self, a):
print(a)
class New(Old):
def __init__(self):
super(New, self).__init__()
self.b = 2
self.do(self.b)
def do(self, b):
print(self.a + b)
new = New()
第一次呼叫将返回1,第二次呼叫3您可以使用super执行您尝试的操作,如下所示:
class Old(object):
def __init__(self):
self.a = 1
Old.do(self, self.a)
def do(self, a):
print(a)
class New(Old):
def __init__(self):
super(New, self).__init__()
self.b = 2
self.do(self.b)
def do(self, b):
print(self.a + b)
new = New()
第一个调用将返回1,第二个调用将返回3您应该问自己为什么要用这种方式覆盖
do()
,通常新的do()
应该能够替换被覆盖的方法(契约设计),您应该问自己为什么要用这种方式覆盖do()
,通常是新的do()
应能够替换替代方法(按合同设计)