def f(obj):
print('attr =', obj.attr)
class Foo:
attr = 100
attr_val = f
x = Foo()
print(x.attr)
x.attr_val()
输出:
100
attr = 100
我从真正的python中得到了这段代码,但我不明白x
是如何传递到函数f
中的。
有人能向我解释一下吗,谢谢。
x
是一个类对象,当您执行x.attr_val()
时,它会自动将自己作为函数的第一个参数(像这样的参数通常命名为self
)。
attr_val
就是所谓的实例方法。当Foo
类调用它时,它会自动将对象作为第一个参数传递,有效地运行:f(x)
如果使用自定义__init__
方法,标准做法是传递self
变量来指示此自引用。
因此,一个更详细的变体是:
def f(obj):
print('attr =', obj.attr)
class Foo:
def __init__(self):
self.attr = 100
def attr_val(self):
f(self) # or "return f(self)"
x = Foo()
x.attr_val()
# attr = 100