プロパティは呼び出し可能ではないため:
In [3]: class A(object):
...: @property
...: def p(self): return 2
...:
In [4]: A.p
Out[4]: <property at 0x2d919a8>
In [5]: dir(A.p)
Out[5]:
['__class__',
'__delattr__',
'__delete__',
'__doc__',
'__format__',
'__get__',
'__getattribute__',
'__hash__',
'__init__',
'__new__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__set__',
'__setattr__',
'__sizeof__',
'__str__',
'__subclasshook__',
'deleter',
'fdel',
'fget',
'fset',
'getter',
'setter']
メソッドがないことに注意してください__call__
。これは、プロパティが複数の関数をラップできるためです。
プロパティをインスタンスのメソッドとして呼び出そうとすると、次のようになります。
In [6]: a = A()
In [7]: a.p()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
C:\Users\Marcin\<ipython-input-7-16c8de382321> in <module>()
----> 1 a.p()
TypeError: 'int' object is not callable