有时使用带有多重继承的mixin可以帮助我们提高代码的可重用性。在
例如,下面的设计
class FollowableMixin(object):
def get_followers(self):
...
...
class User(FollowableMixin):
...
可能比简单地将get_followers
添加到User
更好地重用:
因为稍后我们可能会考虑支持其他可能是get_followers
客户的实体:
class BookStore(FollowableMixin):
...
但是,如果这种模式被过度使用,代码可能会变得过于复杂。在
class User(FollowableMixin, RunnableMixin, FlyableMixin, WhatMixin ...):
...
由于所有这些mixin类将属性和方法注入到类中,因此很难理解代码。例如,您不知道所调用的方法来自何处,而此方法又可能包含对另一个mixin中某个方法的调用。。。在
我该怎么做才能简化这个程序?在
如果你的用户类真的有那么多合适的特性,那么你可能只是拥有一个复杂的应用程序。拥有五个mixin比从其他地方复制的五个函数要好。在
简化的一些可能性:
你的用户类试图做的太多了。分成更小的班级。
收集一些你的混音。例如,您可能会发现有五个类,每个类都是Followable、Runnable和Flyable。生成从这三个mixin派生的中间类FollowRunFly,然后在五个类中使用FollowRunFly。
也许你不必把你的混音片切得这么细。制作一个大mixin,并在类上使用它,让代码在运行时确定对象是可以飞行还是可以被跟踪。
有时,它可以帮助在一个类中收集相关的特性,如果它们经常一起使用的话。在
当你开始使用它时,你只有一个或两个直接基类,而不是很多。在
显然,只有在有意义的情况下你才应该这样做——它可能被滥用。如果不进一步了解您的具体例子,就很难知道在您的案例中这样做是否有意义。在
使用适配器而不是mixin。所以在您的例子中,您将拥有一个IFollowable接口和从书店或用户到ifolloable的适配器。在
请参见http://ginstrom.com/scribbles/2009/03/27/the-adapter-pattern-in-python/,了解Python中适配器的描述,尤其是Martijn Faassen关于使用工厂和接口以及
grokcore.component
的注释。在相关问题 更多 >
编程相关推荐