関数に渡されるオブジェクトのリストを実装する良い方法はありますか? すべてのオブジェクトに inspect メソッドが含まれていますが、それらは異なるクラスのオブジェクトです。(先に言えなくてごめんなさい)
これは Python の単純なダックタイピングです。
class Room:
def __init__(self, name):
self.name = name
def examine(self):
return "This %s looks clean!" % self.name
class Furniture:
def __init__(self, name):
self.name = name
def examine(self):
return "This %s looks comfortable..." % self.name
def examination(l):
for item in l:
print item.examine()
list_of_objects = [ Room("Living Room"), Furniture("Couch"),
Room("Restrooms"), Furniture("Bed") ]
examination(list_of_objects)
版画:
This Living Room looks clean!
This Couch looks comfortable...
This Restrooms looks clean!
This Bed looks comfortable...
あなたの特定の問題については、おそらくあなたは値を返すのを忘れたのexamine()
ですか?(完全なエラー メッセージ (完全なバックトレースを含む) を投稿してください)。
次に、関数の辞書があり、オブジェクトを関数に渡したいと思います。ただし、いくつかの問題が発生しています。たとえば、口述があります。
my_dict = {'look': CallLook(rooms[i])} # this is no dict of functions
あなたdict
が{'look': None}
作っexamine()
た 関数の辞書が必要な場合は、実際の関数呼び出しではなく、呼び出し可能オブジェクトに入れる必要があります。たとえば、次のようになります。
my_dict = {'look': CallLook} # this is a dict of functions
'look'
を特定のものにバインドする場合は、次のようにroom
再定義できますCallLook
。
def CallLook(current_room)
return current_room.examine # return the bound examine
my_dict = {'look': CallLook(room[i])} # this is also a dict of functions
コードのもう 1 つの問題はdict()
、ローカル ディクショナリに名前を付けて組み込みメソッドをシャドウイングしていることですdict
。これを行うべきではありません。これにより厄介なエラーが発生します。