簡體   English   中英

具有相同名稱的超類變量的子類變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM