如何在Python中用self声明空变量
当我在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