2016-10-28 49 views
0

我有一堆類,各有一個參數__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 

一些類的基本列表或字典(如有些是「開放式」(如Prime)。在實例化任何類之後,它們在其他地方使用,因此很高興您可以用相同的方式實例化它們(Something(arg))。

什麼是不是不錯,雖然作爲一個用戶,我不知道哪些是有效的密鑰,而不看代碼。像

animals = { 
    'lion': {'sound': 'roar'}, 
    'human': {'sound': 'burp'}, 
    } 

東西會解決這個問題,但Passenger不適合在這裏。

是否有符合兩種情況的設計模式?

+0

你可以讓該字典變成一個類變量。真正的面向對象的方法是讓'Lion'和'Human'成爲擴展'Animal'的類 –

回答

0
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,並會於初始化的名稱。您可以對此進行修改,以便爲需要的任何動物執行任何操作,並且與在同一課程中使用條件相比,它可以更輕鬆,更直觀。