我有它针对每个类别的不同名称的范畴类,该类别的名称可以是未知的,有好有坏,所有类别共享相同的行为,所以我不希望创建创建对象
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'),所以它肯定会被调用! –