[英]Am I overwriting my superclass definition in the subclass method if I use the same name as the superclass?
[英]Subclass variables with the same name of superclass ones
有可能沒有覆蓋發生嗎? 例如:
class A:
def __init__(self, name):
self.name = name
class B(A):
def __init__(self, name):
A.__init__(self, name)
self.name = name + "yes"
B類中的self.name
是否有任何獨立於A類的方式,或者是否必須使用不同的名稱?
使用兩個下划線前綴名稱會導致名稱錯位,這似乎是您想要的。 例如
class A:
def __init__(self, name):
self.__name = name
def print_name(self):
print self.__name
class B(A):
def __init__(self, name):
A.__init__(self, name)
self.__name = name + "yes"
def print_name(self):
print self.__name
def print_super_name(self):
print self._A__name #class name mangled into attribute
在類定義中,您可以正常地解決__name
(如在print_name
方法中)。 在子類中以及類定義之外的任何其他位置,類的名稱將被損壞到具有前面下划線的屬性名稱中。
b = B('so')
b._A__name = 'something'
b._B__name = 'something else'
在您發布的代碼中,子類屬性將覆蓋超類的name
,這通常是您想要的。 如果您希望它們是分開的,但使用相同的變量名稱,請使用下划線
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.