Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python子类_Python_Class - Fatal编程技术网

Python子类

Python子类,python,class,Python,Class,我有一门关于分数的课(例如,(1,2),(3,4)等): 我想有一个子类混合数,它可以接受整数和分数(例如2分数(1,2),3分数(3,4)等)。我不知道如何做到这一点,但是,任何关于如何做到这一点的帮助将不胜感激 class MixedNumber(Fraction): 在考虑使用提供的分数类实现一个MixedNumber类时,有两种方法会立即浮现在脑海中。一种方法是@HunterMcMillen建议,让类使用组合,即使用不同的对象分别表示整数和分数部分。这使您能够访问类中的每个对象专用方法

我有一门关于分数的课(例如,(1,2),(3,4)等):

我想有一个子类混合数,它可以接受整数和分数(例如2分数(1,2),3分数(3,4)等)。我不知道如何做到这一点,但是,任何关于如何做到这一点的帮助将不胜感激

class MixedNumber(Fraction):

在考虑使用提供的
分数
类实现一个
MixedNumber
类时,有两种方法会立即浮现在脑海中。一种方法是@HunterMcMillen建议,让类使用组合,即使用不同的对象分别表示整数和分数部分。这使您能够访问类中的每个对象专用方法,如果您要从中构建的组件具有各自封装的不同行为,这将非常方便

class MixedNumber(object):
   def __init__(self, whole_number, fraction):
        self.whole_number = whole_number
        self.fraction = fraction

   def __str__(self):
        if self.fraction.numerator == 0:
            return str(self.whole_number)
        elif self.whole_number == 0:
            return str(self.fraction)
        else:
            return '{} {}'.format(self.whole_number,self.fraction)

   def __repr__(self):
        return 'MixedNumber({},{!r})'.format(self.whole_number,self.fraction)
另一种可能性是继承,如果您的
分数
类支持不正确的分数,则可以使用子类以混合数字格式适当处理初始化和字符串呈现,如下所示:

class MixedNumber(Fraction):
    def __init__(self, whole_number, fraction):     
        num = whole_number * fraction.denominator + fraction.numerator
        super(MixedNumber,self).__init__(num,  fraction.denominator)

    def __str__(self):
        # assume positive fractions for demonstration only
        q, r = divmod(self.numerator,self.denominator)
        if r == 0:
            return str(q)
        elif q == 0:
            return super(MixedNumber,self).__str__() 
        else:
            return '{} {}/{}'.format(q,r,self.denominator)

    def __repr__(self):
        q, r = divmod(self.numerator, self.denominator)
        return 'MixedNumber({},Fraction({},{}))'.format(q,r,self.denominator)

Fraction.\uuuu repr\uuuu
方法应返回一个字符串,当传递到
eval
时,该字符串应实例化与源对象相等的内容,即
eval(frac)=frac
。有关
\uuu str\uuu
\uu eval\uu
之间区别的更多详细信息,请参见我最近完成了从标准库
分数
类继承的类
混合
。对于如何使用父类的现有功能,它可能是一个很好的指南。消息来源是。它接受库
Fraction
类接受的任何内容,以及混合数的字符串表示形式,如
mixed('3 4/5')
或rational
整数/分子/分母
中设置的
mixed(3,4,5)
Fraction
的所有功能都已保留<代码>\uuuu str\uuuu
\uuuu repr\uuuu
将分别产生
3 4/5
混合(3,4,5)
。它使到
浮点
或标准
分数
的转换与
浮点(m)
分数(m)
一样简单。干杯

我认为从
分数
继承
混合数字
没有意义。将
分数
组合到
MixedNumber
类中会更有意义。我同意@HunterMcMillen的观点,但请注意,您在文章末尾使用的语法完全适合在Python中继承。也许我不明白你在问什么或者你面临什么问题;你能澄清一下吗?子类总是表示“是”关系。因此,
MixedNumber
似乎不适合从
Fraction
继承。
class MixedNumber(Fraction):
    def __init__(self, whole_number, fraction):     
        num = whole_number * fraction.denominator + fraction.numerator
        super(MixedNumber,self).__init__(num,  fraction.denominator)

    def __str__(self):
        # assume positive fractions for demonstration only
        q, r = divmod(self.numerator,self.denominator)
        if r == 0:
            return str(q)
        elif q == 0:
            return super(MixedNumber,self).__str__() 
        else:
            return '{} {}/{}'.format(q,r,self.denominator)

    def __repr__(self):
        q, r = divmod(self.numerator, self.denominator)
        return 'MixedNumber({},Fraction({},{}))'.format(q,r,self.denominator)