仅在构造函数中声明成员

zen*_*nna 7 python constructor member

我是从C++背景到python

我一直在声明成员变量并以C++方式设置它们,如下所示:

class MyClass:
    my_member = []

    def __init__(self,arg_my_member):
        self.my_member = arg_my_member
Run Code Online (Sandbox Code Playgroud)

然后我在一些开源代码中注意到,初始声明my_member = []完全被遗漏,只在构造函数中创建.

这显然是可能的,因为python是动态的.

我的问题是,这是首选或Pythonic的做事方式,是否存在优点和缺点?

Unc*_*ens 9

你这样做的方式意味着你现在将拥有一个"静态"成员和一个同名的"非静态"成员.

class MyClass:
    my_member = []

    def __init__(self, arg_my_member):
        self.my_member = arg_my_member


>>> a = MyClass(42)
>>> print a.my_member
42
>>> print MyClass.my_member
[]
Run Code Online (Sandbox Code Playgroud)