我收到错误:
TypeError: 'int' object is not callable
当我尝试做这样的事情时:
first = Rational()
print(first.numerator())
下面是我的代码:
class Rational:
def __init__(self, numerator=0, denominator=1):
self.numerator = numerator
self.denominator = denominator
def numerator(self):
return self.numerator
def denominator(self):
return self.denominator
def __str__(self):
return str(self.numerator) + "/" + str(self.denominator)
似乎python认为分子是int类型,但我认为我把它作为Rational Class的一个属性。我非常困惑。
感谢您的任何澄清!
答案 0 :(得分:1)
您正在寻找:
class Rational:
def __init__(self, numerator=0, denominator=1):
self._numerator = numerator
self.denominator = denominator
@property
def numerator(self):
return self._numerator
然后你的调用代码如下:
first = Rational()
print(first.numerator)
您的代码中发生的事情是Rational.numerator
被绑定到您在模块导入时定义的方法,正常情况下。但是,您的__init__
方法明确地说“创建一个名为denominator
的实例属性绑定到此int对象”。在具有相同名称的class属性之前解析了新的实例属性,因此对instance.denominator
的任何引用都将解析为该实例属性。
我建议的替换,如果你真的想要实现一个getter(不是特别Pythonic;你已经有办法访问instance.denominator
内置!),就是将它存储在一个私有命名中变量并创建一个公开命名的属性方法,该方法加载其值并返回它。
答案 1 :(得分:1)
您的代码中有numerator
个太多... ;-)
您在numerator
方法的第一行有一个名为__init__
的属性,另一个属于def numerator(self)
定义的方法。
根据您的需要,有不同的可能性:
first.numerator
。@property
条款,但我不会想到为什么在这种情况下会这样做,因为没有任何内容可以计算或修改属性,