我有
django模型類(PS:模型類是一個代表django結構的數據庫表的類,它們全部來源於
類。假設我設置其屬性如下:如何使用屬性不是從對象派生的類Model
類)
class SomeModel(SomeClass):
def __init__(self):
self.x = 23
self.y = 100
def z(self):
return self.x + self.y
在我的情況,我不想處理z
作爲一種方法和呼叫是SomeModel().z()
,但作爲一個屬性,並稱呼其爲SomeModel().z
。此外,該屬性不應該更新或更改。在這種情況下,我把它定義爲一個@property
class SomeModel(SomeClass):
def __init__(self):
self.x = 23
self.y = 100
@property
def z(self):
return self.x + self.y
@z.setter
def z(self, val):
raise NotImplementedError
現在,我可以使用SomeModel().z
就像當年類的屬性。但由於它不是從object
衍生@z.setter
無法工作,我可以設定值z
與
some = SomeModel()
some.z
>> 123
some.z = 567
some.z
>> 567
有沒有辦法使用@property
爲不是從object
派生類的方法嗎?還是有另一種解決方案,可以讓我將我的類方法作爲屬性來處理。我的基本需求是將它們作爲屬性來處理,但如果我也可以覆蓋set
和delete
方法,那將會更好。
UPDATE:我意識到Model
類是從object
衍生和我可以使用@property
如預期。所以相關的例子是無效的,我改變他們一些。但我的問題仍然有效,因爲我也有一些類不是從object
派生的。
當你使用'obj.x = 5'時,如果沒有'object'基類,它將用'5'替換屬性。但是,您可以對對象使用多重繼承,並使setattr正常工作。 – cmd