Python - 设置类属性依赖于同类其他属性的值
抱歉,如果这个问题在其他地方已经被问过,但我不太确定该怎么问,而且搜索也没有找到什么有用的信息。
在Python(2.6.x)中,我创建了一个类
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
这个类返回
{'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
所以在调用start.jd()之前,.jd这个属性(或者我该称它为函数还是方法?说实话我对这些术语不太确定)是不存在的。有没有办法让我可以重写这个,让它总是根据timetuple类中的当前值存在,或者在调用.jd属性时自动更新呢?
我知道可以通过在init(self)部分直接创建一个.jd属性,然后做类似这样的事情
start = timetuple()
start.jd = julian_date(start)
但我其实想知道怎么更好地设置我的类 :)
1 个回答
10
你想要真正定义一个属性,而不是一个变量:
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"