如何在Python中用self声明空变量

2 投票
2 回答
9840 浏览
提问于 2025-04-18 11:43

当我在Python中创建一个类时,我需要用self.来声明变量:

class ClassName(object):
    def __init__(self, arg):
        super(ClassName, self).__init__()
        self.arg = arg

这很好,但要实例化这个类,我需要给init方法传递参数……但是如果我没有这些参数,或者不想麻烦呢?

我想要的东西像这样:

def __init__(self):
        super(ClassName, self).__init__()
        self.arg

……这样我就可以引用一个已经存在但为空的arg。 编辑: 我说的“已经存在但为空”是指类似C语言的行为:

int a;

……在这种情况下,变量a是存在的,但没有值。甚至gcc也把这个称为“空”,所以我以为这个问题会很清楚。

默认值可能是最接近我想要的东西,我会使用这个。

2 个回答

0

通常,我们可以在构造函数里给这个参数设置一个默认值,这样在创建对象的时候,如果没有提供这个参数,就会自动使用这个默认值。

class ClassName(object):
    def __init__(self, arg=None):
        super(ClassName, self).__init__()
        self.arg = arg

举个例子:

>>> print ClassName().arg
None
>>> print ClassName("foo").arg
foo

当然,你也可以用其他有用的值作为默认值,而不是用None,不过要注意,使用可变的数据类型,比如列表,可能会有一些问题。

13

选项 1:根本不声明它们

看起来你是从静态语言(比如 Java、C#、C++)过来的,可能在适应 Python 时遇到了一些困难。因为 Python 是动态语言,你可以随时在类里面或外面添加或删除属性。如果你没有合适的值,可以不在 __init__ 方法里声明它,可以在其他方法里声明,这样也是完全可以的。

选项 2:设置一些默认值

你说的“存在但为空”的值到底是什么意思呢?什么叫做空呢?在一些静态类型的语言中,未显式初始化的成员值会自动被设置为默认值(比如整数会被初始化为 0,指针或引用会被设置为 null 等等)。如果你知道一个合适的默认值,就把你的 arg 初始化为那个值;如果没有合适的默认值,那就选择选项 1。

2a. 手动赋值

def __init__(self):
    self.arg1 = 0
    self.arg2 = 'a'
    self.arg3 = None

2b. 通过默认函数参数

def __init__(self, arg1=0, arg2='a', arg3=None):
    self.arg1 = arg1
    self.arg2 = arg2
    self.arg3 = arg3

2c. 使用属性(了解更多

class ClassName(object):
    @property
    def arg1(self):
        return self._arg1 if hasattr(self, '_arg1') else 0

    @arg1.setter
    def arg1(self, value):
        self._arg1 = value

撰写回答