我的一般规则是- 是在对象上执行 *** 作还是由对象执行 *** 作?
如果是由对象完成的,则应该是成员 *** 作。如果它也可以应用于其他事物,或者由对象的其他事物完成,那么它应该是一个函数(或其他事物的成员)。
引入编程时,传统上(尽管实现不正确)以现实世界中的对象(例如汽车)来描述对象。您提到一只鸭子,让我们开始吧。
class duck: def __init__(self):pass def eat(self, o): pass def crap(self) : pass def die(self) ....
在“对象是真实的事物”类比的上下文中,为对象可以执行的任何 *** 作添加类方法是“正确的”。所以说我想杀死一只鸭子,是否要在鸭子上添加.kill()?不,据我所知,动物不会自杀。因此,如果我想杀死一只鸭子,我应该这样做:
def kill(o): if isinstance(o, duck): o.die() elif isinstance(o, dog): print "WHY????" o.die() elif isinstance(o, nyancat): raise Exception("NYAN "*9001) else: print "can't kill it."
远离这种类比,为什么我们要使用方法和类?因为我们要包含数据并希望以某种方式构造我们的代码,以便将来可以重用和扩展它。这使我们想到了面向对象设计非常重要的封装概念。
封装原理实际上就是它的含义:作为设计人员,您应该隐藏有关实现和类内部的所有内容,对于任何用户或其他开发人员而言,都不一定要访问它。因为我们处理类的实例,所以这简化为“什么 *** 作对于
该实例 至关重要”。如果 *** 作不是实例特定的,则它不应是成员函数。
TL; DR :@Bryan说了什么。如果它在实例上运行并且需要访问类实例内部的数据,则它应该是成员函数。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)