2011-02-26 9 views
2

죄송합니다. 질문 보관소에 이미 존재하지만 죄송합니다. 검색을 통해 위대한 계시로 이어지지 않았다면 죄송합니다. .Python - 클래스 속성을 같은 클래스의 다른 속성 값에 의존하도록 설정하십시오.

나는 그래서 .jd 재산

{'hour': 13, 'min': 30, 'month': 2, 'sec': 0, 'weekday': 6, 'year': 2011, 'date': 23, 'day': 1} 
{'hour': 13, 'min': 30, 'month': 14, 'jd': 2455594.0625, 'sec': 0, 'weekday': 6, 'year': 2010, 'date': 23, 'day': 1} 
2455594.0625 

를 반환하는 클래스

class timetuple(object): 
    def __init__(self): 
     self.weekday = 6 
     self.month = 1 
     self.day  = 1 
     self.year = 2011 
     self.hour = 0 
     self.min  = 0 
     self.sec  = 0 
    def jd(self): 
     self.jd = julian_date(self) 

def julian_date(obj): 
    (Code to calculate a Julian Date snipped) 

start = timetuple() 
start.day = 23 
start.month = 2 
start.year = 2011 
start.hour = 13 
start.min = 30 
start.sec = 0 

print start.__dict__ 
start.jd() 
print start.__dict__ 
print start.jd 

을 만들었습니다 (또는 내가 함수 나 방법이 부릅니까 파이썬 (의 2.6.x)에서

? I 여기에 솔직하게 lingo가 확실하지 않음) start.jd() 호출 전에 존재하지 않습니다. timetuple 클래스의 현재 값을 기반으로 항상 존재하게 만들거나 .jd 속성이 호출 될 때 자체를 업데이트하도록하는 방법이 있습니까?

나는 난 그냥 초기화 (자기) 섹션에서 .jd 속성을하여 그것에게 먼 길을 할 수있어 다음

start = timetuple() 
start.jd = julian_date(start) 

같은 일을하지만 난 방법을 알고 싶습니다 더 솔직히 내 클래스를 설정 :

+0

".jd"귀하의 경우, 및 모자 방법, 재산으로 redefiens. 이 코드는 methoda의 이름과 인스턴스 속성으로 .jd를 사용하기 때문에 예상대로 작동하지 않습니다. – jsbueno

+0

앰버의 대답은 좋은 것입니다. 그러나 당신이 여기에있는 것은 매우 이상합니다. 왜'__init __()'에'self.jd = julian_date (self)'를 넣지 않았습니까? – senderle

+0

@senderle :'__init__' 섹션에 넣으면 클래스의 인스턴스가 생성 될 때 한 번만 업데이트되고 나중에 다른 속성이 변경되면 .jd 속성이 업데이트되지 않습니다. – Ryan

답변

9

을 당신은 변수와 달리, 실제로 속성을 정의하려면 : t 내부에 운전 방식으로 정의된다

class A(object): 

    def __init__(self): 
     self.a = 1 
     self.b = 1 

    @property 
    def a_plus_b(self): 
     return self.a + self.b 

foo = A() 
print foo.a_plus_b # prints "2" 
foo.a = 3 
print foo.a_plus_b # prints "4" 
foo.b = 4 
print foo.a_plus_b # prints "7" 
+0

아, 거기 우리가 간다! 그것은 저에게 효과적입니다. 아주 명확한 예를 들어 주셔서 감사합니다! – Ryan

관련 문제