繁体   English   中英

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

[英]Can't print an attribute of my own class in 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 Class的一个属性。 我非常困惑。

谢谢你的任何澄清!

您正在寻找:

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 !),就是将它存储在一个私有命名的变量中并公开创建-named属性方法,用于加载其值并返回它。

你的代码中有太多的numerator ... ;-)你在__init__方法的第一行有一个名为numerator属性,另一个属性是由def numerator(self)定义的方法。 根据您的需要,有不同的可能性:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM