无法在python中打印我自己的类的属性



我得到了错误:

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类的一个属性。我非常困惑。

谢谢你的解释!

您的代码中有太多的numerator…;-)在__init__方法的第一行有一个名为numerator的属性,另一个作为def numerator(self)定义的方法。有不同的可能性取决于你需要什么:

  1. 删除方法,始终使用first.numerator
  2. 重命名属性,使它们没有冲突。
  3. 使用@property子句,但我不认为为什么你会这样做,在这种情况下,因为没有什么计算或修改属性,

你要找的是:

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对象"。这个新的实例属性在具有相同名称的类属性之前被解析,所以任何对instance.denominator的引用都将解析到该实例属性。

我建议替换,如果你真的想实现一个getter(这不是特别pythononic;(您已经有一种访问instance.denominator内置的方法!),就是将它存储在一个私有命名的变量中,并创建一个公共命名的属性方法来加载它的值并返回它。

相关内容

  • 没有找到相关文章

最新更新