我有它針對每個類別的不同名稱的範疇類,該類別的名稱可以是未知的,有好有壞,所有類別共享相同的行爲,所以我不希望創建創建對象
Category.GOOD
這個語句應該返回一個類的對象與他的名字爲「好」,所以我嘗試:子類爲每種類型的類別中,有問題,當我試圖 以這種方式創造不同的類別來 如下:
class Category(object):
def __init__(self, name):
self.name = name
@property
def GOOD(self):
category = Category(name='good')
return category
@property
def BAD(self):
category = Category(name='bad')
return category
然後,我創建並使用類有以下的輸出:
c = Category.GOOD
c.name
AttributeError: 'property' object has no attribute 'name'
意識到這不工作我試着一個java一樣的做法:
class Category(object):
GOOD = Category(name='good')
BAD = Category(name='bad')
def __init__(self, name):
self.name = name
我來到這裏是一個未定義的名稱「類別」的錯誤,所以我的問題是如果有一種pythonic的方式來創建類似這樣的對象。
你不能做到這一點外的開箱即用的了'property';您必須創建自己的描述符,或者只需使用'classmethod'並調用GOOD()',如下所示。 –
@MartijnPieters - 不可能用這種行爲創建描述符嗎?問題在於他正在訪問類中的描述符(這只是一個屬性,沒有任何特殊描述符的魔術出現) – mgilson
@mgilson:類也調用描述符; 'classmethod'也是一個描述符。 'function .__ get __(None,cls)'在Python 2中給出了一個'unbound method'(在Python 3中返回'self'),所以它肯定會被調用! –