두 개의 클래스 X & Y가 있다고 가정합니다. 클래스에 속성을 추가하여 새로운 클래스 X1과 Y1을 생성함으로써 이러한 클래스를 꾸밀 수 있습니다. 예를 들어Python은 부모 객체 유형을 변경하기 위해 클래스를 장식합니다
:
class X1(X):
new_attribute = 'something'
class Y1(Y):
new_attribute = 'something'
new_attribute 항상 X1 및 Y1 모두 동일 할 것이다. X & Y는 다중 상속이 불가능하다는 점을 제외하고는 의미있는 방식으로 관련이 없습니다. 다른 속성들도 있습니다. 그러나 이것은 설명하기 위해 퇴화 된 것입니다.
내가 이것을과 복잡함을하고있어 같은 느낌,하지만 다소 likeso 데코레이터를 사용하는 생각했다 :
def _xywrap(cls):
class _xy(cls):
new_attribute = 'something'
return _xy
@_xywrap(X)
class X1():
pass
@_xywrap(Y)
class Y1():
pass
나는 매우 일반적인 패턴이없는 것 같은이 느낌, 나는 많은 것 생각, 의견 및 피드백이 필요합니다.
읽어 주셔서 감사합니다.
브라이언
편집 : 예 : 여기
이 불 수있는 관련 추출물이다. 여기from google.appengine.ext import db
# I'm including PermittedUserProperty because it may have pertinent side-effects
# (albeit unlikely), which is documented here: [How can you limit access to a
# GAE instance to the current user][1].
class _AccessBase:
users_permitted = PermittedUserProperty()
owner = db.ReferenceProperty(User)
class AccessModel(db.Model, _AccessBase):
pass
class AccessExpando(db.Expando, _AccessBase):
pass
# the order of _AccessBase/db.* doesn't seem to resolve the issue
class AccessPolyModel(_AccessBase, polymodel.PolyModel):
pass
가 하위 문서의 : 다음과 같이 일반적인 클래스는
class Thing(AccessExpando):
it = db.StringProperty()
때때로 것은 다음과 같은 특성을 갖게됩니다
Thing { it: ... }
그리고 다른 시간 :
Thing { it: ..., users_permitted:..., owner:... }
을
나는 무섭다. 왜 Thing이 때때로 _AccessParent 속성을 갖고, 다른 때는 그렇지 않은지 파악해야합니다.
클래스에 직접 정의 된 속성을 단순히 간단하게 정의하는 것이 나쁜 이유는 무엇입니까? (예 : 여러 속성이있는 경우 - 그러나 X/Y가 서로 관련이 없다고 말한 경우) 무엇이든지 상관없이 명시 적으로 정의해야하는 것처럼 보입니다. 수업. – Fragsworth
@Fragsworth - 추가 할 속성이 많습니다. 실제로 X/Y 클래스가 5 개 이상 있습니다 (예를 들어 X & Y는 단지 축약 형입니다). 추가 할 속성은 항상 동일합니다. DRY를 위반하여 중복 속성의 일종의 리팩터링을 사용하지 않아 코드를 만듭니다. –