У меня есть куча классов, каждый из которых имеет один аргумент __init__
, а затем возвращают некоторые данные, например,классы, такие как словари, бесконечные списки
class Animal(object):
def __init__(self, name):
if name == 'lion':
self.sound = 'roar'
elif name == 'human':
self.sound = 'burp'
else:
raise ValueError('Unknown animal')
class Passenger(object):
def __init__(self, index):
self.sound = 'I\'m passenger number %d.' % index
Некоторые из этих классов, по существу, списки и словари (например, Animal
), некоторые из них «открытые» (например, Prime
). После создания экземпляра любого из классов они используются в другом месте, поэтому приятно, что вы можете создавать их так же (Something(arg)
).
Что такое не приятно, хотя факт, что, как пользователь, я не знаю, какие из них действительны, не глядя на код. Что-то вроде
animals = {
'lion': {'sound': 'roar'},
'human': {'sound': 'burp'},
}
бы решить эту проблему, но Passenger
не подходит здесь.
Есть ли шаблон дизайна, который подходит для обоих случаев?
Вы можете сделать этот словарь переменной класса. Реальный объектно-ориентированный подход состоит в том, чтобы «Lion» и «Human» были классами, которые расширяют «Animal» –