在一个类中索引一个字符串,Python告诉我我直接索引该类?

时间:2018-03-07 02:08:34

标签: python class oop indexing

这是给我问题的代码。我收到的错误表明“'Fraction'对象不支持索引”在第8行,即使Fraction对象是一个字符串?我哪里错了?

class Fraction: 
    def __init__(self, x, y):
        self.fraction_str = str(x) + '/' + str(y)

    def add(self, second_fraction):
        our_fraction = self.fraction_str
        if second_fraction[-1] != our_fraction[-1]:

4 个答案:

答案 0 :(得分:0)

根据你的描述,我认为你的问题是our_fraction是一个字符串,但second_fraction是Fraction类型的对象而不是字符串。

答案 1 :(得分:0)

您的问题很可能是由于second_fraction属于Fraction类,您的语法假定它是一个字符串。实际上访问类本身中的fraction_str变量:

if second_fraction.fraction_str[-1] != our_fraction[1]:

答案 2 :(得分:0)

我觉得你在这里有点困惑。您的Fraction不是字符串。您的Fraction班级正在使用composition而不是inheritanceFraction实例将字符串存储为数据字段,其实例不是字符串

从异常Python开始,second_string似乎是一个Fraction类,你正试图将其编入索引。这不会起作用,因为Fraction不是字符串。您需要访问Fraction实例包含的字符串:

if second_fraction.fraction_str[-1] != our_fraction[-1]:
    # code ...

如果,您希望Fraction类支持索引,则可以重载与索引运算符[]__getitem__对应的内置方法:

class Fraction:
    # code...
    def __index__(self, slice):
        return self.fraction_str[slice]

虽然要小心。 Fraction仍然不是字符串。它只是一个支持对其实例进行索引的类。

答案 3 :(得分:0)

所以问题是你直接调用Class对象并希望它返回Fraction.fraction_str对象。

最好的方法是像这样引用类对象:second_fraction.fraction_str[-1]

或者你可以写一个__getitem__方法