簡體   English   中英

Python將setter覆蓋為沒有setter的屬性?

[英]Python overriding setter to an attribute with no setter?

我有別人做的A類,我無法編輯:

class A:
    def __init__(self, x):
        self.x = x

現在,我試圖從A繼承我自己的類B ,並將x作為屬性而不是屬性。 這可能嗎?

我已經嘗試過:

class B(A):
    def __init__(self, x):
        super().__init__(x)

    @property
    def x(self):
        return super().x

    @x.setter
    def x(self, x):
        super().x = x
        print(x)  # my stuff goes here

但正如我預期的那樣,這是不可能的: AttributeError: 'super' object has no attribute 'x'

還有其他方法,也許有些工作方法?

不可以,除類屬性外,不能將super()用於其他任何東西; x實例屬性,並且屬性沒有繼承機制。

實例屬性位於單個名稱空間中; 沒有“父實例”屬性名稱空間。

您仍然可以在實例__dict__對象中訪問該屬性:

class B(A):
    @property
    def x(self):
        return self.__dict__['x']

    @x.setter
    def x(self, x):
        self.__dict__['x'] = x
        print(x)  # my stuff goes here

屬性是數據描述符 ,這意味着在查詢實例屬性之前先對其進行了查找(請參閱描述符howto ),但是您仍然可以直接訪問它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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