在下面的示例中,最后一行B().show()没有调用适当版本的show函数。它应该调用子版本而不是父版本。我想我应该做一些类似于\uuu类\u方法()的事情,但却找不出一个完整的答案。你知道吗
我当然可以覆盖B中的show函数,但这实际上意味着复制和粘贴show函数。它不优雅。你知道吗
## version one ##
class A(object):
def method(self):
print("hello")
def show(self):
self.method()
class B(A):
def method(self):
print("goodbye")
A().show() ## print out hello
B().show() ## print out goodbye
## version two ##
class A(object):
def __method(self):
print("hello")
def show(self):
self.__method()
class B(A):
def __method(self):
print("goodbye")
A().show() ## print out hello
B().show() ## print out hello
如果您用两个下划线开始一个方法名,它将使它只能从该类访问。考虑以下示例:
那么
A().__m
怎么了?查看A.__dict__
,在这里可以查找属性:最重要的是:
因此,您编写的函数
__m
被重命名为_A__m
。您不能从类之外的任何地方访问这些方法。你知道吗如果类中有一个方法
show
调用一个方法__method
(以__
开头),它将只调用该类的该方法,因为它永远不知道_B__method
,只知道_A__method
。你知道吗请注意,绝对不应该使用
_A__method
从类外部调用此方法。如果你需要做你正在做的事情,你应该用一个下划线。你知道吗如果您真的需要
B
的__method
方法是私有的,那么B
也应该重写show
:要保留每个类的私有方法并能够访问它们,可以执行以下操作:
输出:
相关问题 更多 >
编程相关推荐