当我在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也认为它是空的
所以我认为这个问题很清楚。
默认值尽可能接近我想要的值,我将使用它。
答案 0 :(得分:10)
您似乎来自静态语言(Java,C#,C ++),并且您很难适应Python。由于Python是动态的,因此您可以随时在类的方法内外添加和删除属性。如果您没有合适的值,则不要在__init__
中声明它,在其他方法中声明它,这完全没问题。
“现有但空洞”的价值究竟是什么意思?空虚是什么意思?在(某些)静态类型语言中,未显式初始化的成员值会自动初始化为其默认值(整数初始化为0,指针/引用为null等)。如果您知道适当的默认值,只需将arg
初始化为该值;如果没有适当的默认值,请转到选项1.
def __init__(self):
self.arg1 = 0
self.arg2 = 'a'
self.arg3 = None
def __init__(self, arg1=0, arg2='a', arg3=None):
self.arg1 = arg1
self.arg2 = arg2
self.arg3 = arg3
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
答案 1 :(得分:1)
通常的方法是在构造函数中为该参数提供默认值:
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
,但be wary with using mutable data types, like lists。