如何在__init__中设置python属性

46 投票
2 回答
31460 浏览
提问于 2025-04-16 05:32

我有一个类,里面有一个属性,我想把它变成一个 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__ 这个地方,类已经完全创建好了,所以你可以访问里面的属性。

撰写回答