在使用 spyder IDE编码一个新类并使用 pylint 检查最终结果时,我遇到了错误消息(但是代码按预期运行,没有错误)。
上下文: 在构造函数中,我想创建新成员(很多)。通常,这些数目很少,因此我使用以下编码:
class MyClass():
def __init__(self):
self.a = ...
self.b = ...
但是对于许多成员(假设10个成员),并且所有成员都设置为相同的初始值(假设它们都是dict()),我很想这样做:
class MyClass():
def __init__(self):
_vars = ["a", "b", "c", ...]
for _var in _vars:
self.__dict__[_var] = dict()
在课堂上,我使用以下方法引用了一个成员:
class MyClass():
def my_method(self):
print self.c
错误 与 pylint的 (在 Spyder的 ):
在此文件上使用pylint时,出现错误消息:
MyClass.my_method:“ MyClass”的实例没有“ c”成员。
但是,代码运行正常,没有错误,即。我可以毫无问题地访问成员“ c”。
问题 :这是正确的编码,还是应该避免使用这种方法初始化成员?
是的,直接更新实例字典是合理的。另外,您可以使用 setattr 更新变量。我已经看到了生产代码中使用的两种方法。
使用 setattr
,无需直接触摸实例字典:
class MyClass():
def __init__(self):
for var in 'a', 'b', 'c':
setattr(self, var, dict())
但是,如果直接更新实例字典,则需要考虑几个可能的改进。例如,使用
vars()
代替 dict
看起来更好一些。另外,您可以将
dict.update
方法与关键字参数一起使用:
class MyClass():
def __init__(self):
vars(self).update(a=dict(), b=dict(), c=dict())
问题内容: 我希望能够从Nib中提取UIView子类的实例。 我希望能够调用MyCustomView.instantiateFromNib()并具有MyCustomView的实例。我几乎已经准备好通过桥接头文件来移植我拥有的工作中的Objective- C代码,但是我想我会首先尝试惯用的方法。那是两个小时前。 现在是错误的,因为“’是’之后的预期类型”。在那之后我尝试过的内容显示了很多我对Swif
晚上好。 我对Swift中的转义(异步)闭包持怀疑态度,我想知道解决它的最佳方法是什么。 有一个示例函数。 正如您可能已经注意到的,这将导致内存泄漏,因为on成功是一个转义闭包,它保持自我。 现在,解决的办法就是在闭包里加入【弱自我】。我希望另一个函数只有在self不为0时才会被调用,所以应该是这样的: 但是参数是个问题,因为我不能传递nil参数,所以我必须打开自己才能使用该参数。 使用强制展开(
问题内容: 我有一个带有几个初始化变量的python类: 有没有一种方法可以在PyCharm中自动创建此代码,因此我不必显式键入: 这种模式在我的代码中经常发生。有没有更好的(Pythonic)方法来初始化类? 我已经看过这篇文章(用Python进行自动属性分配的最佳方法是什么,这是个好主意吗?),但是我不想使用装饰器,因为它会使代码的可读性降低。 问题答案: 您可以从制作自定义实时模板开始。我不
问题内容: 我正在尝试为我的一个模型编写函数,以便可以通过执行以下操作创建对象: 当我编写模型时,我有: 这样可以正常工作,我可以将对象保存到数据库中,但是当我这样做时,除非我拿出函数,否则它不会拉任何东西。有任何想法吗? 问题答案: 依靠Django的内置功能并传递命名参数将是最简单的方法。 但是,如果您打算保存一些击键,建议您向类添加一个静态便捷方法,而不要弄乱初始化程序。
问题内容: 我正在学习Python编程语言,遇到了一些我不太了解的东西。 用类似的方法: 怎么self办?这是什么意思?它是强制性的吗? 该方法有什么作用?为什么有必要?(等等。) 我认为它们可能是OOP构造,但我不太了解。 问题答案: 你是对的,这些是oop结构。 是一个类的构造函数。该self参数引用对象的实例(如thisC ++)。 分配对象的内存时将调用该方法: self如果要将值与对象持
问题内容: 我知道,在Python中通常不赞成使用类型检查函数参数,但我认为这样做很有意义。 在我的项目中,我有一个抽象基类和一个子类,该子类具有更多功能,例如旋转,幅度变化等。数字的列表和元组也将返回True,因为我也有许多接受这些Coord类型作为参数的函数和方法。 。我已经设置了装饰器来检查这些方法的参数。这是一个简化的版本: 这个版本非常简单,仍然有一些错误。只是为了说明这一点。它的用法如
问题内容: 我想使用Mixin始终向子类添加一些初始化功能,每个子类都继承自不同的API基类。具体来说,我想制作多个不同的子类,这些子类继承自这些API提供的不同基类之一和一个Mixin,后者始终将以相同的方式执行Mixin初始化代码,而无需代码复制。但是,除非我在Child类的__init__函数中显式调用它,否则似乎永远不会调用Mixin类的__init__函数,这不理想。我建立了一个简单的测
问题内容: 我有一个看起来像的文件夹结构: : : : : : : 当我直接使用该模块时,它似乎按预期工作: 但是,当我在sphinx中使用自动模块时(将项目文件夹添加到sys.path之后): 我得到的页面只有: 似乎正在忽略类型语句。 但是,如果我将所有代码直接复制到每个模块/子模块的文件中,则会得到: sphinx是否不适用于文件中具有此类导入语句的模块,还是我遗漏了一个更明显的问题? 理想