在Python中,如何以与命名元组相同的方式表示一个类?

问题描述 投票:0回答:1

我最初使用命名元组编写了一些代码:

from collections import namedtuple


Count = namedtuple('Count', 'input_number multiple_of count remainder')


def get_count(input_number: int, multiple_of: int) -> Count:
    '''
    >>> get_count(100, 10)
    Count(input_number=100, multiple_of=10, count=10, remainder=0)
    >>> get_count(5, 6)
    Count(input_number=5, multiple_of=6, count=0, remainder=5)
    >>> get_count(999, 90)
    Count(input_number=999, multiple_of=90, count=11, remainder=9)
    '''
    count = input_number // multiple_of
    remainder = input_number % multiple_of
    return Count(
        input_number=input_number,
        multiple_of=multiple_of,
        count=count,
        remainder=remainder
    )

然后,我想合并python3.6 +的键入功能,发现我无法使用集合中的namedtuple做到这一点,所以我将Count类编辑为以下内容:

from typing import NamedTuple


class Count(NamedTuple):
    input_number: int
    multiple_of: int
    count: int
    remainder: int

我对需要两个功能不是很满意,所以我以:

class GetCount():
    '''
    >>> GetCount(100, 10)
    GetCount(input_number=100, multiple_of=10, count=10, remainder=0)
    >>> GetCount(5, 6)
    GetCount(input_number=5, multiple_of=6, count=0, remainder=5)
    >>> GetCount(999, 90)
    GetCount(input_number=999, multiple_of=90, count=11, remainder=9)
    '''

    def __init__(self, input_number: int, multiple_of: int):
        self.input_number: int = input_number
        self.multiple_of: int = multiple_of
        self.count: int = input_number // multiple_of
        self.remainder: int = input_number % multiple_of

以我期望的方式获得输出的最佳方法是什么(请参阅doctests获得期望的输出)。>>

<<

解决问题的方法如下:
class GetCount(): ''' >>> GetCount(100, 10) GetCount(input_number=100, multiple_of=10, count=10, remainder=0) >>> GetCount(5, 6) GetCount(input_number=5, multiple_of=6, count=0, remainder=5) >>> GetCount(999, 90) GetCount(input_number=999, multiple_of=90, count=11, remainder=9) ''' def __init__(self, input_number: int, multiple_of: int): self.input_number: int = input_number self.multiple_of: int = multiple_of self.count: int = input_number // multiple_of self.remainder: int = input_number % multiple_of def __repr__(self): return f"{self.__class__.__name__}({', '.join([f'{k}={v}' for k, v in self.__dict__.items()])})"

您可以通过运行以下命令查看所提供的测试是否通过:

import doctest
doctest.testmod(verbose=True)
python class namedtuple repr
1个回答
0
投票
class GetCount(): ''' >>> GetCount(100, 10) GetCount(input_number=100, multiple_of=10, count=10, remainder=0) >>> GetCount(5, 6) GetCount(input_number=5, multiple_of=6, count=0, remainder=5) >>> GetCount(999, 90) GetCount(input_number=999, multiple_of=90, count=11, remainder=9) ''' def __init__(self, input_number: int, multiple_of: int): self.input_number: int = input_number self.multiple_of: int = multiple_of self.count: int = input_number // multiple_of self.remainder: int = input_number % multiple_of def __repr__(self): return f"{self.__class__.__name__}({', '.join([f'{k}={v}' for k, v in self.__dict__.items()])})"
© www.soinside.com 2019 - 2024. All rights reserved.