2024-05-08 13:49:04 发布
网友
现在我在班上有一个非常简单的方法,但是我很难调用它
def size(self): return self.size
我需要使用的电话是:
print(str(ll.size()))
总是导致这样的输出:
print(str(ll.size())) TypeError: 'int' object is not callable
我听说过好几次这是我设置size()方法的方式,但我始终无法理解它。有人能告诉我一个正确的方法,使一个方法,可以这样调用,并解释差异,以供将来参考?谢谢
不能同时具有实例变量名size和实例方法名size
如何区分它们
在这里,实例变量优先,因为它是首先定义的(在__init__方法中可能有一个self.size = x,因此首先出现在对象__dict__中),它是int,因此不可调用
__init__
self.size = x
__dict__
int
如果对size值没有特殊处理,只需直接使用属性而不定义函数:
size
class Foo: def __init__(self, somearg): # ... self.size = somearg * 3 >>> foo = Foo(3) >>> foo.size 9
如果你想让事情变得更复杂(与我这里的小例子相反),使用property:
class Foo: def __init__(self, somearg): # ... self._size = None self._someattr = somearg # ... @property def size(self): if self._someattr > 2: return self._someattr * 3 return 1 >>> foo = Foo(3) >>> foo.size 9 >>> bar = Foo(2) >>> bar.size 1
要完全理解属性装饰器的优点,请阅读this tutorial
似乎您的类有两个名为size的属性,一个是您定义的方法,另一个是您从方法内部调用的属性
从错误消息可以看出第二个被调用了。所以,ll.size是一个int,ll.size()是'调用'这个int
ll.size
ll.size()
尝试将您的方法重命名为size以外的其他方法,看看是否有效
不能同时具有实例变量名size和实例方法名size
如何区分它们
在这里,实例变量优先,因为它是首先定义的(在
__init__
方法中可能有一个self.size = x
,因此首先出现在对象__dict__
中),它是int
,因此不可调用如果对
size
值没有特殊处理,只需直接使用属性而不定义函数:如果你想让事情变得更复杂(与我这里的小例子相反),使用property:
要完全理解属性装饰器的优点,请阅读this tutorial
似乎您的类有两个名为
size
的属性,一个是您定义的方法,另一个是您从方法内部调用的属性从错误消息可以看出第二个被调用了。所以,
ll.size
是一个int,ll.size()
是'调用'这个int尝试将您的方法重命名为
size
以外的其他方法,看看是否有效相关问题 更多 >
编程相关推荐