实例方法中的“self”与另一个变量的本地绑定是否可以接受?
问题描述:
根据最佳实践标准,将实例方法中的self本地绑定到另一个变量是否可接受?它派上用场,特别是在测试方法时。我还想知道,如果实例属性在循环中检索,这种方法是否更有效。下面是一个例子实例方法中的“self”与另一个变量的本地绑定是否可以接受?
class C:
def __init__(self):
self.a = "some attribute"
def some_function(self):
c = self
for _ in range(10):
print(c.a)
答
这通常不提供任何好处,它实际上是反直觉的,因为它混淆了读者对你的意图是什么(self
可以说是在Python中最知名的名称)。
唯一的上侧做这个(虽然有点不同)是,如果你想通过分配属性的名称(noted as a performance tip in the Python Wiki),以消除对self
属性查找的:
def some_function(self):
# we assign 'self.a' to 'a'
# to avoid looking for 'a' in 'self' for every iteration
a = self.a
for _ in range(10):
print(a)
这只会通过在极小的程度上降低执行速度来提供帮助。除此之外,你真的没有像这样重命名self
的好处。
我不认为这有害或任何东西,但你为什么要这样做?为什么不在你的循环内部执行'print(self.a)'?你能详细谈谈“它派上用场”吗? – Kevin
为什么测试时这会派上用场?这并不是说你可以接触到这个函数来测试当地人的约束力,所以'self'和'c'在这里并没有什么不同。无论如何,你可以将第一个参数命名为任何你想要的名称,而不必命名为'self'。 –
有些人在阅读代码时看到'c.a'可能会错过'c'只是对实例的引用。 '显式比隐式更好。' –