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

kab*_*oom 1 python self

当我在Python中创建一个类时,我必须使用以下内容声明变量self.:

class ClassName(object):
    def __init__(self, arg):
        super(ClassName, self).__init__()
        self.arg = arg
Run Code Online (Sandbox Code Playgroud)

很好,但要实例化它,我需要将参数传递给init方法......但如果我没有它们,或者不想打扰它们怎么办?

我想要类似的东西

def __init__(self):
        super(ClassName, self).__init__()
        self.arg
Run Code Online (Sandbox Code Playgroud)

......以后再提到现有但空洞的arg.编辑.通过现有但空的我意味着类似C的行为:

int a;
Run Code Online (Sandbox Code Playgroud)

......变量a存在但没有价值.即使是gcc也认为它是空的,所以我认为这个问题很清楚.

默认值尽可能接近我想要的,我将使用它.

Pau*_*nta 11

选项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
Run Code Online (Sandbox Code Playgroud)

2B.通过默认函数参数

def __init__(self, arg1=0, arg2='a', arg3=None):
    self.arg1 = arg1
    self.arg2 = arg2
    self.arg3 = arg3
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)