为什么可以在不表示'self'关键字的情况下初始化python class属性?

时间:2018-06-25 07:10:46

标签: python

class Foo():
    def __init__(self):
        pass

    def makeInstanceAttribute(oops):
        oops.x = 10

f = Foo()
f.makeInstanceAttribute()
print(f.x)

,它正在打印10,它是如何工作的?为什么oops具有与self相同的作用?

2 个答案:

答案 0 :(得分:2)

self只是一个约定。无论如何都可以命名。实际上,作为 first 参数传递给函数的是对象实例。考虑以下代码:

class A(object):
    def self_test(self):
        print self

    def foo(oops):
        print oops

>>> a = A()
>>> a.self_test()
<__main__.A object at 0x03CB18D0>
>>> a.foo()
<__main__.A object at 0x03CB18D0>
>>> 

question可能与您有关,您可能会发现有帮助。

答案 1 :(得分:2)

引用Python documentation

  

通常,方法的第一个参数称为self。这无非是一种约定:self对Python绝对没有特殊的含义。但是请注意,如果不遵循该约定,则其他Python程序员可能对代码的可读性较低,并且还可以想到可能会依赖此类约定编写类浏览器程序。