【问题标题】:classes like dictionaries, infinite lists类,如字典、无限列表
【发布时间】:2016-10-28 15:44:28
【问题描述】:

我有一堆类,每个类都有一个__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 不适合这里。

是否有适合这两种情况的设计模式?

【问题讨论】:

  • 您可以将该字典设为类变量。真正面向对象的方法是让LionHuman 成为扩展Animal 的类

标签: python function dictionary generator


【解决方案1】:
class Animal(object):
    def __init__(self, name):
        self.name = name
    def some_thing_all_animals_do(self):
        print('do stuff')

class Passenger(Animal):
    def stuff_only_passengers_do(self):
        print('more stuff')

class Lion(Animal):
    def stuff_only_lions_do(self):
        print('lion stuff')

这样,乘客和狮子都会“知道”方法some_thing_all_animals_do,并在初始化时取一个名字。你可以修改它来为你需要的任何动物做任何你需要的事情,它比在同一个类中使用条件更容易和直观。

【讨论】:

    猜你喜欢
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多