-1
假設我有一個類:Python的覆蓋元類集屬性
class ABC:
pass
而且我做的:
ABC.x = 123
這不會給我一個錯誤,儘管我還沒有創建一個對象。調用哪個__func__
方法,以及如何覆蓋它?
假設我有一個類:Python的覆蓋元類集屬性
class ABC:
pass
而且我做的:
ABC.x = 123
這不會給我一個錯誤,儘管我還沒有創建一個對象。調用哪個__func__
方法,以及如何覆蓋它?
您需要定義一個元類並在其中覆蓋__setattr__
,然後讓您的類使用該元類。
class Meta(type):
def __new__(meta, name, bases, attrs):
return super().__new__(meta, name, bases, attrs)
def __setattr__(cls, attr, value):
print("I am setting {}.{} = {}".format(cls.__name__, attr, value))
return super().__setattr__(attr, value)
class Foo(metaclass=Meta):
pass
然後:
>>> Foo.blah = 2
I am setting Foo.blah = 2
>>> Foo.blah
2
你設置類對象的屬性。所以'__setattr__'被調用,但它在元類上被調用。查找元類以瞭解您所處的位置。 – BrenBarn
@BrenBarn感謝您的建議,我會盡快做到這一點。然而,爲了解決我眼前的問題,你介意提交一個答案嗎? :) –
你使用Python 2還是Python 3? – BrenBarn