【发布时间】:2022-01-06 16:42:34
【问题描述】:
number = 5
print(number.__class__)
print(number.__str__())
print(number.__add__(1))
#Output
<class 'int'>
5
6
我想我想看看我是否理解正确。
所以有不同的方法可以访问 dunder 方法。在第一种情况下,看起来我正在访问该方法,就好像它是int 类的一个属性。在这种情况下,__class__ 是否使用 @property 装饰器来访问它,就好像它是一个属性一样?如果是这样,那就有道理了。
第二个和第三个有意义。 __str___ 是在 int 类中定义的一个不带参数的 dunder 方法。你称它为一种方法。 __add__ 接受一个参数,即您要添加到其中的数字。所以你必须像一个带参数的方法一样调用它。所以这些都没有使用 @property 装饰器。
我想更令人困惑的是,从技术上讲,__str__ 可以使用@property 装饰器变成一个属性。我自己在自己的课程上对其进行了测试,它肯定可以以任何一种方式工作,所以似乎有点随意,哪些像属性一样被访问,哪些像方法一样被访问。假设我的理论是正确的。
【问题讨论】:
-
__class__是 an attribute,不是方法。
标签: python oop python-decorators