假设我在alotoffunc.py
中有很多函数被一种以上的对象使用。在
假设ObjectI
和{alotoffunc.py
中的一些函数。每个对象都使用不同的函数集,但所有对象都有变量object.table
。在
alotoffunc.py
:
def abc(obj, x):
return obj.table(x) * 2
def efg(obj, x):
return obj.table(x) * obj.table(x)
def hij(obj, x, y):
return obj.table(x) * obj.table(y)
def klm(obj, x, y):
return obj.table(x) *2 - obj.table(y)
然后导入函数并重载它们:
^{pr2}$现在看起来一团糟,我应该如何构建我的对象类并安排我的alotoffunc.py
?在
如果我想避免mixin,也许是为了最小化代码的不透明度,我会这样做:
无论何时创建类的实例,导入的方法都会自动绑定。换句话说,它们在默认情况下是实例方法。在
如果希望它们是静态方法,请按如下方式使用^{} :
^{pr2}$另外,我也不会太担心这些多个import语句的性能问题,因为Python非常聪明,只运行一次导入的模块,然后将它保存在内存中,以备以后需要。在
如果您想要导入的函数有某种逻辑分组,那么您肯定应该使用mixin,或者将函数组织成单独的“mixin modules”,这样您甚至可以
from mixinmodule import *
。对于mixin类方法,我认为常规import语句比from import更好,除非您的函数名很长并且只想输入一次!在(1)可以有一个实现所有方法的基类,然后重写不必要的方法来在子类中引发
NotImplementedError
。在(2)您可以使用mixin来减少重复:
您也可以将此方法与@cpburnz的方法相结合。在
最简单的方法是将所需函数作为实例方法直接绑定到其定义中的类。请注意,每个函数将接收
self
作为第一个参数。在如果各种函数没有清晰、逻辑的分组,那么在类中定义mix可能是一种更简单的方法。分组确实取决于您的用例,因此mix-in方法可以更好地取决于具体情况。在
相关问题 更多 >
编程相关推荐