Первоначально я написал некоторый код, используя именованный кортеж:
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
)
ПРИМЕЧАНИЕ. Как при печати объекта он имеет формат: Count (input_number = 100, multip_of = 10, count = 10, остаток = 0), например.
Существует ли Pythoni c / лучший способ представления обычных классов таким же образом?
I тогда Я хотел включить функции ввода 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 для ожидаемого результата).