2011-02-10 5 views
5

파이썬 : 속성을 일반 속성으로 바꾸는 방법?

기본 클래스는이 있습니다 :

def _management_form(self): 
    # code here 
    return form 
management_form = property(_management_form) 

내 파생 된 클래스에서이 쓰기 위해 노력하고있어 :

self.management_form = self.myfunc() 

물론 그것은 작동하지 않습니다. 이 속성에는 setter가 없으므로 "특성을 설정할 수 없습니다"라고 표시됩니다. 그러나 나는 그것을 설정하고 싶지 않다. 나는 "managent_form"이 의미하는 바를 다시 정의하고 싶다. 먼저 del self.managent_form을 넣으려고했으나 작동하지 않았습니다. 그렇다면 나는 그것을 어떻게 특성을 잃어 버릴 수 있습니까?

+0

당신에게 좋은 생각이야 확실해? 그것은 is-a 관계를 깨뜨리는 것처럼 들립니다 ... – delnan

+0

속성이 정의 된 방식으로, 당신이 그것을 사용할 때마다 객체를 재구성합니다. 이것은 바보입니다. print 문을 거기에 넣고 10 번 호출하면 문제가 발생합니다. 일부 속성을 수정해야하기 때문에 문제가 발생하지만 다음 번에 해당 속성을 사용할 경우 쓸모가 없습니다. 나는 그들이 (Django 개발자들) 왜 그렇게했는지 전혀 모른다. 기본적으로, 나는 한 번 생성 된 다음 그때부터 그 인스턴스를 반환하기를 원합니다. – mpen

답변

6

는 대신 인스턴스의 클래스에 할당 할 수 있습니다 :

물론
MyClass.management_form = property(self.myfunc) 

,이 모든 인스턴스 (심지어 기존의 것들)의 클래스 자체를 변경합니다. 이것이 괜찮 으면, 모든 파생 클래스 생성자가 아니라 정확히 한 번 호출 할 수 있습니다 (지금 추측하고있는 것은 지금하고있는 작업입니다).

그렇지 않으면, 당신은 그것을 일반적인 방법으로 파생 클래스에서 재정의 할 수

class MyOtherClass(MyClass): 
    def _new_mf(self): 
     # Better code 
     return form 
    management_form = property(new_mf) 
+1

방금 ​​속성을 반환하기 위해 그것을 재정의하는 것이 좋다고 생각합니다. 파이썬의 다른 모든 것들은 완전히 변경 가능합니다. – mpen

관련 문제