2010-07-22 3 views
0

다음과 같이하고 싶습니다. 컨테이너 클래스 컨테이너가 있는데, 다른 클래스 인 OtherClass를 참조하는 속성 attr이 있습니다. 함수로 객체에 대한 Python 액세스 (__call__이 아님)

x = Container(2) 

x.attr # when accessing the attribute - return value from default method 
2 
x.attr.another() # but also an attribute can be treated as an object 
4 
x.attr.as_str() 
'String: 2' 

나는이 어떻게 할 수있는

:
class OtherClass: 
    def __init__(self, value): 
     self._value = value 

    def default(self): 
     retirn self._value 

    def another(self): 
     return self._value ** 2 

    def as_str(self): 
     return 'String: %s' % self._value 

class Container: 
    def __init__(self, attr): 
     self.attr = OtherClass(attr)

내가하고 싶어?

+0

. 'attr'이 호출 가능한 메소드'another'를 가진 클래스인지 확인하십시오. 속성, 프록시 또는 메타 클래스로 수행 할 수 없습니다. –

답변

0

OtherClass__int__()을 덮어 쓰지 않고 정수 값을 얻으려면 int()을 입력해야합니다.

0

attr은 무엇입니까? 당신은 그것을 두 가지 방법으로 가질 수 없습니다. 어떤 함수의 반환 값이거나 OtherClass의 인스턴스입니다.

OtherClass을 상속하는 방법은 Integer에서 상속 받습니까?

+0

반환 값은 다른 유형이 될 수 있습니다. –

+0

어떤 경우에 값을 원할 때'x.attr.default()'를 호출 할 수 없습니까? – katrielalex

+0

개발자들에게 간단한 API를 제공하고자합니다. 특정 메소드가없는 경우 - 기본값을 리턴하십시오. 어쨌든 도움을 주셔서 감사합니다. –

2

필요한 경우 확실하지 않습니다. 나에게 이상한 디자인처럼 보인다

>>> class OtherClass(int): 
...  def __init__(self, value): 
...   self._value = value 
...  def another(self): 
...   return self._value ** 2 
... 
>>> class Container: 
...  def __init__(self, attr): 
...   self.attr = OtherClass(attr) 
... 
>>> x=Container(2) 
>>> x.attr 
2 
>>> x.attr.another() 
4 

단지-때문에 - 당신 - 사용 - 클래스 - 나던 - 평균 키우면-OO-LY의 gnibbler

나는이에 20 분을 낭비 믿을 수 없어
+0

이 작업을 수행하는 것이 단순히 불쾌한 경우에도 이것이 유일한 유일한 해결책입니다. – Bakuriu

관련 문제