如何在__init__中设置python属性
我有一个类,里面有一个属性,我想把它变成一个 property
(属性),但是这个属性是在 __init__
方法里设置的。我不太确定该怎么做。如果不在 __init__
里设置这个属性,那就简单多了,效果也很好。
import datetime
class STransaction(object):
"""A statement transaction"""
def __init__(self):
self._date = None
@property
def date(self):
return self._date
@date.setter
def date(self, value):
d = datetime.datetime.strptime(value, "%d-%b-%y")
self._date = d
st = STransaction()
st.date = "20-Jan-10"
但是一旦需要在 __init__
里进行初始化,这就变得复杂了,我不知道该怎么正确处理。
class STransaction(object):
"""A statement transaction"""
def __init__(self, date):
self._date = None
奇怪的是,下面的做法似乎可以用,但感觉不太对劲。
class STransaction(object):
"""A statement transaction"""
def __init__(self, date):
self._date = None
self.date = date
@property
def date(self):
return self._date
@date.setter
def date(self, value):
d = datetime.datetime.strptime(value, "%d-%b-%y")
self._date = d
那么,在 __init__
里设置属性的正确方法是什么呢?
2 个回答
10
class STransaction(object):
"""A statement transaction"""
def __init__(self, date):
self._date = None #1
self.date = date #2
如果你想在不执行设置器的情况下设置代理字段 self._date
,可以使用第#1行。如果你也想在启动时执行设置器,就用第#2行。两种方法都是对的,关键在于你想要做什么。
31
我觉得你的代码没有什么大问题。在 __init__
这个地方,类已经完全创建好了,所以你可以访问里面的属性。