【发布时间】:2016-10-19 12:19:51
【问题描述】:
在 Python 中,此代码有效:
class A:
def __init__(me):
me.foo = 17
def print_foo(myself):
print(myself.foo)
def set_foo(i, v):
i.foo = v
您可能已经注意到,self 参数在 __init__ 方法中命名为 me,在 print_foo 方法中命名为 myself,在 set_foo 方法中命名为 i。
是否存在将self 参数命名为self 以外的名称有用的情况?如果不是,为什么 Python 允许这样做,因为它肯定是编写难以阅读和维护的代码的一种方式,也是混乱的根源?
【问题讨论】:
-
因为PEP-20。 “显式优于隐式”,因此您不希望出现一个神奇的
self,并且“特殊情况不足以打破规则”,所以如果它是一个显式参数,你可以给它分配任何你喜欢的名字。 -
“如果不是,为什么 Python 允许这样做”,因为 不允许 允许它是一个非常愚蠢的限制。
-
"为什么 Python 允许这样做" 那么为什么要停在那里呢?我还可以创建一个名称为
subtract的函数,它将两个数字相加。这也会造成混乱,但 Python 允许这样做。 -
单个函数可以既作为实例方法也可以作为类方法,这就排除了在首次定义函数时需要特定名称。
class A: pass; def foo(first): pass; A.inst = foo; A.cls = classmethod(foo)创建一个具有(平凡的)实例和使用相同底层函数对象实现的类方法的类。