我有一个类,我希望将其转换为属性,但此属性在__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__
中设置属性的正确方法是什么?
谢谢, 亚伦。
答案 0 :(得分:23)
我认为您的代码没有任何实际问题。在__init__
中,完全创建了类,因此可以访问属性。
答案 1 :(得分:5)
class STransaction(object):
"""A statement transaction"""
def __init__(self, date):
self._date = None #1
self.date = date #2
如果要在不执行setter的情况下设置代理self._date
对象,请使用#1行。如果您想在启动时执行setter,请使用#2。两种方式都是正确的,这只是你需要的问题。