2013-02-05 3 views
0

그래서 다음 코드를 가지고 있습니다. 클래스의 속성에 어떤 종류의 메타 데이터를 추가하려고합니다. 내 생각에는 getter가 float/int/string 개인 변수를 반환하지만 자세한 이름과 같은 일부 추가 데이터를 반환하는 getter/setter가 있다고 생각했습니다.파이썬 속성이 덮어 쓰여지고 있습니다

이것은 setter를 사용할 때까지 완벽하게 작동합니다. setter는 setter와 getter를 무시한 것처럼 보입니다.

누군가 내가 왜하고 있는지 알 수 있습니까? 아니면 내가 뭘하려고하는지 더 나은 방법이 있다면?

감사합니다. 파이썬 2에서

class Param(float): 
    def __new__(self,name,value): 
     return float.__new__(self,value) 

    def __init__(self,name,value): 
     self.__name = name 

    name = property(lambda self: self.__name) 


class Beer: 
    def __init__(self, temp): 
     self.__T = temp 

    @property 
    def temp(self): 
     return Param('Beer Temperature', self.__T) 

    @temp.setter 
    def temp(self,value): 
     self.__T = float(value) 


print b.temp.name, b.temp.__class__ 

print b.temp * 4.5 

print b.temp.name, b.temp.__class__ 

b.temp = 101 

print b.temp.name, b.temp.__class__ 

답변

5

는, 속성은 (object에서 파생 된) new-style classes 제대로 작동 :

class Beer(object): 
    def __init__(self, temp): 
     self.__T = temp 

    @property 
    def temp(self): 
     return Param('Beer Temperature', self.__T) 

    @temp.setter 
    def temp(self,value): 
     self.__T = float(value) 
+0

아, 미묘한 ... 지금은 완벽하게 작동합니다, 감사합니다! – dblanky

관련 문제