现在我的课程中有一个非常简单的方法,但是我很难调用它。
def size(self):
return self.size
我需要使用的电话是:
print(str(ll.size()))
这总是导致这个输出:
print(str(ll.size()))
TypeError: 'int' object is not callable
我已经多次被告知这是我设置size()方法的方式,但我从来没有能够理解它。有人能告诉我一个正确的方法来制作一个可以像这样调用的方法并解释差异以供将来参考吗?谢谢!
答案 0 :(得分:3)
您的班级似乎有两个名为size
的属性,一个是您定义的方法,另一个是您在方法中调用的属性。
从错误消息中可以看出第二个是开始调用的。因此,ll.size
是一个整数,ll.size()
正在调用'那个。
尝试将您的方法重命名为size
之外的其他内容,看看是否有效。
答案 1 :(得分:1)
您不能同时拥有实例变量名称大小和实例方法名称大小。
如何区分它们?
此处实例变量优先,因为它首先定义(您的self.size = x
方法中可能有__init__
,因此首先出现在对象__dict__
中)int
1}}因此无法调用。
如果您对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