1
我有一個連接表繼承,例如Animal,Cat和Dog。我想讓用戶創建一個新的動物。列出多態繼承選擇並基於該選擇創建實例
有沒有辦法讓所有類型(貓,狗)進入用戶列表?有沒有辦法讓用戶選擇並從中創建實例? (我不想硬編碼if choice == "cat": Cat()
。)
我有一個連接表繼承,例如Animal,Cat和Dog。我想讓用戶創建一個新的動物。列出多態繼承選擇並基於該選擇創建實例
有沒有辦法讓所有類型(貓,狗)進入用戶列表?有沒有辦法讓用戶選擇並從中創建實例? (我不想硬編碼if choice == "cat": Cat()
。)
SQLAlchemy跟蹤父模型的多態子項。在Animal
型號上使用inspect
找到mapping of polymorphic identities。
>>> from sqlalchemy import inspect
>>> i = inspect(Animal)
>>> i.polymorphic_map
{'cat': <Mapper at 0x7fb4c7a8b390; Cat>,
'dog': <Mapper at 0x7fb4c7a98240; Dog>}
您可以從class_
屬性的映射器中獲取該類。
>>> i.polymorphic_map['cat'].class_
__main__.Cat
有了這兩塊,你現在可以得到一個類型列表,以呈現給用戶,並且您可以根據所選擇的值實例化一個模型。
types = inspect(Animal).polymorphic_map.keys()
user_input = 'cat'
new_cat = inspect(Animal).polymorphic_map[user_input]()
如果有更多的水平層次,比如CalicoCat
和HairlessCat
,您可以使用polymorphic_iterator
看整個層次。
是否允許用戶在python中添加類,或者是否希望用戶能夠在數據庫中添加表?或兩者?你想讓用戶註冊還是你想讓代碼自動反思答案? – AlexLordThorsen