Yur*_*its 5 python django inheritance overloading django-models
我有一个模特
BaseModel
Run Code Online (Sandbox Code Playgroud)
以及它的几个子类
ChildModelA(BaseModel), ChildModelB(BaseModel), ...
Run Code Online (Sandbox Code Playgroud)
使用多表继承.将来我计划有几十个子类模型.
所有子类都有一些方法实现
do_something()
Run Code Online (Sandbox Code Playgroud)
如何从BaseModel实例调用do_somthing?
几乎完全相同的问题(没有解决方案)发布在这里:http:
//peterbraden.co.uk/article/django-inheritance
一个更简单的问题:如何在不检查所有可能的子类的情况下将BaseModel instnace解析为其子类实例之一?
您是否会使用基本类型的实例,还是始终使用子类型的实例?如果是后者,则调用该方法,即使您有对基类型的引用,因为对象本身是子类型。
\n\n由于 Python 支持鸭子类型,这意味着您的方法调用将被适当地绑定,因为子实例将真正具有此方法。
\n\n\n\n\n一种 Pythonic 编程风格,通过检查对象的方法或属性签名而不是通过与某些类型对象的显式关系来确定对象的类型(\xe2\x80\x9cIf\n看起来像鸭子,嘎嘎叫起来像鸭子,它一定是鸭子。\xe2\x80\x9d) 通过强调接口而不是特定类型,精心设计的代码\n 通过允许\n 提高了灵活性\n多态性取代。鸭子类型避免使用 type() 或 isinstance() 进行测试。(但请注意,鸭子类型可以用抽象基类来补充。)相反,它通常采用 hasattr() 测试或 EAFP 编程。
\n
请注意,EAFP 代表“请求宽恕比请求许可更容易”:
\n\n\n\n请求原谅比请求许可更容易。这种常见的 Python 编码风格假设存在有效的键或属性,并在假设证明错误时捕获异常。这种干净、快速的风格的特点是存在许多 try 和 except 语句。该技术与许多其他语言(例如 C)常见的 LBYL 风格形成对比。
\n
| 归档时间: |
|
| 查看次数: |
3695 次 |
| 最近记录: |