[英]Stop inherited method from running from inside it's super method
假设我有以下两个类:
class A():
def foo():
print("foo inside A!")
class B(A):
def foo():
super().foo()
print("foo inside B!")
x = B()
x.foo()
这将打印:
foo inside A!
foo inside B!
有没有干净的方式,我可以放弃的代码在执行B
的foo
方法从A
的foo
的方法?
就像是:
class A():
def foo():
print("foo inside A!")
if some condition:
<return from inherited method here>
class B(A):
def foo():
super().foo()
print("foo inside B!")
x = B()
x.foo()
这样输出将是:
foo inside A!
编辑:只是为了澄清,我试图避免检查B
的foo
方法中的super().foo()
返回。
您可以从A.foo()
引发一个异常, A.foo()
其捕获到B.foo()
,并在except
子句中进行一些工作。 可能是这样的:
class MyException(Exception):
pass
class A:
def foo(self):
print("foo inside A!")
if 'some condition':
raise MyException
class B(A):
def foo(self):
try:
super().foo()
except MyException:
print("foo inside B!")
那对你有用吗?
您的A.foo()
方法可以返回您在B.foo()
签入的值。 可能是这样的:
class A:
def foo(self):
print("foo inside A!")
if 'some condition':
return True
else:
return False
class B(A):
def foo(self):
val = super().foo()
if val:
print("foo inside B!")
那对你有用吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.