【发布时间】:2022-01-21 04:01:24
【问题描述】:
考虑一个简单的例子:
class C:
@staticmethod
def my_static_method():
print("static")
def my_instance_method(self):
print("self")
当我调用C().my_static_method() 时,python 不会将C 的实例传递给my_static_method,并且my_static_method 引用的descriptor 也不期望C 的实例。
这是有道理的。
但是当我调用 C().my_instance_method() 时,python 怎么知道将我调用 my_instance_method 的 C 的实例作为参数传递,而不需要我指定任何内容?
【问题讨论】:
-
因为函数对象是描述符。了解它的工作原理in your own link
-
Docs on method objects: "调用
x.f()完全等同于MyClass.f(x)" -
为了记录,我没有投反对票。而且我认为反对票是严厉的。这不是一个坏问题。
-
很难写出我想要的答案,只是因为我无法决定在各个技术方面应该包含多少细节。
-
参见:eev.ee/blog/2012/05/23/python-faq-descriptors,然后是eev.ee/blog/2013/03/03/…。 “是什么让 Python 成为一种面向对象的语言?...答案是描述符,它基本上是“让自己工作的东西”。描述符对象是类的一个属性,只要在一个该类的实例。"
标签: python python-decorators python-descriptors