如何在__init__中设置python属性

时间:2010-10-15 11:49:12

标签: python properties

我有一个类,我希望将其转换为属性,但此属性在__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 个答案:

答案 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。两种方式都是正确的,这只是你需要的问题。