각 범주마다 다른 이름을 가진 범주 클래스가 있습니다. 범주 이름은 알 수 없거나 좋고 나쁨, 모든 범주는 동일한 동작을 공유하므로 만들지 않습니다.파이썬에서 정적 속성으로 개체 만들기
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
그럼 내가 만들어 다음과 같은 출력 범주를 사용
class Category(object):
GOOD = Category(name='good')
BAD = Category(name='bad')
def __init__(self, name):
self.name = name
무엇 내가 여기에 도착하는 것은 정의되지 않은 이름입니다 : 내가 접근과 같은 자바를 시도 작동하지 않습니다
c = Category.GOOD
c.name
AttributeError: 'property' object has no attribute 'name'
이 있음을 깨닫고 "카테고리"오류, 그래서 내 질문은 거기에 이런 종류의 개체를 만드는 pythonic 방법입니다.
을; 대신 자신 만의 디스크립터를 생성하거나,'classmethod'를 사용하고 아래에 주어진대로'GOOD()'을 호출해야한다. –
@MartijnPieters -이 동작으로 설명자를 만들 수 없습니까? 문제는 그가 클래스의 디스크립터에 접근하고 있다는 것입니다 (단지 속성 일 뿐이며 특별한 디스크립터 마법도 사용되지 않습니다). – mgilson
@mgilson : 클래스에 대해서도 디스크립터가 호출됩니다. 'classmethod' 역시 기술자입니다. 'function .__ get __ (None, cls)'는 파이썬 2에서 '언 바운드 메소드'를 제공합니다 (파이썬 3에서'self'를 반환합니다). 그래서 확실히 호출됩니다! –