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

时间:2014-07-01 11:43:34

标签: 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 :(得分:10)

选项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中。使用属性(read more

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