對不起,如果這已經存在於問題檔案中的某處,但我不確定如何提問並且搜索沒有導致任何重大啓示。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
所以.jd屬性(或者我把這個函數或方法?我不確定這裏的術語是否真實)在start.jd()調用之前不存在。有沒有辦法我可以重寫這個讓它總是基於timetuple類中的當前值存在,或者在調用.jd屬性時讓它自己更新?
我知道我可以只是在初始化(個體經營)款作出.jd財產做了很長的路,然後像做
start = timetuple()
start.jd = julian_date(start)
,但我想知道如何建立我的課更誠實:)
「.jd」在您的案件被定義爲實現方法具了,裏面牛逼帽子法,重新認定自己是一種財產。此代碼可能無法按預期工作,因爲您使用.jd作爲方法名稱和實例屬性 – jsbueno
琥珀的答案是很好的答案;但你在這裏有什麼奇怪的。你爲什麼不把'self.jd = julian_date(self)'放在'__init __()'中? – senderle
@senderle:將它放入'__init__'節中時,它只會在創建類的實例時更新一次,而在其他屬性隨後發生更改時不會更新.jd屬性。 – Ryan