我最初使用命名元组编写了一些代码:
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)
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()])})"