【发布时间】:2017-09-09 08:53:28
【问题描述】:
如标题所述,我以一个困惑为例:
class Point(object):
def __init__(self, x=0.0, y=0.0):
self.x, self.y = x, y
@classmethod
def get_point1(cls, cor): # cor is list with x=1 and y=2
return Point(cor[0], cor[1])
@classmethod
def get_point2(cls, cor):
return cls(cor[0], cor[1])
我很困惑我应该使用哪一个(get_point1 或 get_point2),它们之间有什么区别?
【问题讨论】:
-
想一想如果您将
Point子类化并在子类上调用这些方法中的每一个会发生什么。您应该使用哪种取决于您想要的行为。 -
cls()是首选,因为它允许您扩展该类。例如,class SpecialPoint(Point): pass。目前,SpecialPoint.get_point1(cor)将创建一个Point对象,而SpecialPoint.get_point2(cor)将创建一个SpecialPoint。 -
谢谢,除了子类还有其他区别吗?
-
一个可能是,如果您将来最终更改类的名称,您只需更改一次(在顶部),而不是在每个类方法中。
-
cls()如果你要继承Point绝对是有意义的。如果您认为最终可能将其子类化,这可能是有道理的。如果这两种情况都不是,那么使用Point()会更加明确和易读。
标签: python