gpt4 book ai didi

python - 没有 self 的内部类功能

转载 作者:太空狗 更新时间:2023-10-29 22:14:50 26 4
gpt4 key购买 nike

大家平安!我正在使用 Python 3.6.3,我发现奇怪的是这种构造是可能的:

class TestClass(object):
def __init__(self):
self.arg = "arg"

def test():
print("Hey test")

并使用:

>>> TestClass.test()
"Hey test"

我知道在 Python 中有以 self 为参数的标准方法(不知道如何正确调用它们)、静态方法、类方法、抽象方法。

但是 test() 是个什么样的方法呢?是静态方法吗?


编辑:

这种确定类内部函数的方法是否有任何有用的用例?

最佳答案

在python 3中,函数和类中定义的函数没有区别:

def test():
print("Hey test")

class TestClass:
def test():
print("Hey test")

test() # works
TestClass.test() # also works

这两个都是正常的功能。

当您通过类的实例 访问函数时,隐式self 参数的魔力就会出现,如下所示:

obj = TestClass()
obj.test() # throws an error because the test function doesn't accept arguments

这是函数 test 变成(bound) 方法 test 的时候。如果打印它们,您可以看到不同之处:

print(TestClass.test) 
print(instance.test)
# output:
# <function TestClass.test at 0xaaaaaa>
# <bound method TestClass.test of <__main__.TestClass object at 0xbbbbbb>>

总结一下:

  • 通过类访问函数会为您提供原始函数。
  • 通过实例访问函数为您提供了一个带有绑定(bind) self 参数的方法。

有关从函数到绑定(bind)方法的这种转换究竟如何工作的详细信息,请参阅 the descriptor how-to ,特别是 the section about functions .

关于python - 没有 self 的内部类功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47054156/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com