2017-03-12 2 views
1

내 클래스 속성 인 attr에 대해 이라는 이름을 사용하려고했지만 불가능한 것처럼 보입니다.인스턴스 속성을 사용하여 클래스 속성을 정의하는 방법은 무엇입니까?

class B: 

    def __init__(self, val): 
     self.val = val 

    def __get__(self, instance, owner): 
     return owner.valEditNew(self.val) 

    def __set__(self, instance, value): 
     return 


class A: 

    def __init__(self, name = 'def_name'): 
     self.name = name 

    attr = B('G120') 

    def valEditNew(val): 
     val += ' @edited' 
     return val 

a = A('JJ') 
print(a.attr) 

내가 >>> builtins.NameError: name 'self' is not defined 이 가능하지 경우 G120 대신에 self.name 또는 이름이나 ...를 사용하는 경우에있어, 당신이 나에게 길을 보여줄 수 : 여기에 코드입니까?

답변

1

당신은 설명 개체를 포함하는 인스턴스의 속성에 액세스 __get__/__set__instance 매개 변수를 사용하려면 : 나는 ... 그 다음에 __set__ 방법을 할 수 __get__을 무시하고있어 알고

class B: 

    def __get__(self, instance, owner): 
     return instance.valEditNew(instance.name) # <--- 

    def __set__(self, instance, value): 
     return 


class A: 

    attr = B() 

    def __init__(self, name='def_name'): 
     self.name = name 

    def valEditNew(self, val): 
     val += ' @edited' 
     return val 


a = A('JJ') 
print(a.attr) 
# prints => JJ @edited 
+0

을 나는 원래의 것을 찾았나요? –

+0

@ shiyonsufa, https://docs.python.org/3/howto/descriptor.html 또는 https://docs.python.org/3/reference/datamodel.html#descriptors – falsetru

+0

@shiyonsufa를 읽어 보시기 바랍니다. B는 어떤 클래스의 하위 클래스도 아니고'__get__','__set__'을 가지지 않는'object'; 무시는 수행되지 않습니다. 대화 형 쉘에서'object .__ get__'을 시도하십시오. – falsetru

관련 문제