在使用spyder IDE 编写新类并使用pylint检查最终结果时,我遇到了错误消息(但代码按预期工作而没有错误).
上下文:在构造函数中,我想创建新成员(非常多).通常,这些很少,所以我使用这个编码:
class MyClass():
def __init__(self):
self.a = ...
self.b = ...
Run Code Online (Sandbox Code Playgroud)
但是在很多成员的情况下(假设是10),所有设置为相同的初始值(假设它们都是dict()),我很想这样做:
class MyClass():
def __init__(self):
_vars = ["a", "b", "c", ...]
for _var in _vars:
self.__dict__[_var] = dict()
Run Code Online (Sandbox Code Playgroud)
在课堂上,我正在使用以下成员来引用成员:
class MyClass():
def my_method(self):
print self.c
Run Code Online (Sandbox Code Playgroud)
错误与pylint的(在Spyder的):
在此文件上使用pylint时,我收到一条错误消息:
MyClass.my_method:'MyClass'的实例没有'c'member.
但是,代码运行得很好,没有错误,即.我可以毫无问题地访问会员'c'.
问题:这是一个正确的编码,还是应该避免这种方法来初始化成员?
Python中的构造函数通常如下所示:
class SomeClass:
def __init__(self, a, b = None, c = defC):
self.a = a
self.b = b or []
self.c = c
Run Code Online (Sandbox Code Playgroud)
有没有这样的快捷方式,例如简单地定义__init__(self,**kwargs)和使用键作为属性self?
我没有找到一个简短的构造函数调用的引用,它会初始化调用者选择的变量.我在寻找
class AClass:
def __init__(self):
pass
instance = AClass(var1=3, var2=5)
Run Code Online (Sandbox Code Playgroud)
而不是写更重
class AClass:
def __init__(self, var1, var2):
self.var1 = var1
self.var2 = var2
Run Code Online (Sandbox Code Playgroud)
或者更重
instance = AClass()
instance.var1 = 3
instance.var2 = 5
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?