正如我所说,正如其他答案所说,这并非完全不可能。让我们看一个说教示例:
class A(object):
class COUNT(object):
__val = 12345
def __call__(self, *args, **kwargs):
return self.__val
def __getattr__(self, item):
return self.__val
def __str__(self):
return str(self.__val)
count = COUNT()
if __name__ == '__main__':
your_inst = A()
print(your_inst.count)
# outputs: 12345
print(your_inst.count())
# outputs: 12345
您可能会注意到,您需要实现一系列事情来完成这种行为。首先,您的类将需要实现属性count,而不是作为您想要的值类型,而是作为另一个类的实例,除其他外,它必须实现(为了使该类行为,通过鸭子类型,作为您想要的类型)__call__ 方法,它应该返回与您相同的类__getattr__,这样,公共属性count 将作为可调用的(your_inst.count())回答,或者,正如您所说,一个字段 (your_inst.count),方法相同。
顺便说一句,我不知道您是否清楚以下内容,但它可以帮助您理解为什么它不像人们认为的那样微不足道,使count 和count()行为方式相同:
class A(object):
def count(self):
return 123
if __name__ == '__main__':
a = A()
print(type(a.count))
# outputs: <class 'method'>
print(type(a.count()))
# outputs: <class 'int'>
. 调用a 类__getattr__ 以获取项目count。 a.count 会将引用返回到该函数 (python's function are first class objects),第二个函数也会这样做,但括号将调用 a.count 中的 __call__ 方法。