我的IDE一直建议我将我的实例方法转换为静态方法。我猜是因为我没有在这些方法中引用任何自我。
一个例子是:
class NotificationViewSet(NSViewSet):
def pre_create_processing(self, request, obj):
log.debug(" creating messages ")
# Ensure data is consistent and belongs to the sending bot.
obj['user_id'] = request.auth.owner.id
obj['bot_id'] = request.auth.id
所以我的问题是:我只是忽略了IDE的建议而失去了什么,还是有更多的建议呢?
答案 0 :(得分:2)
这是工作流程,你的设计意图,也是一个有点主观的决定。
首先,你是对的,你的IDE建议将方法转换为静态方法,因为该方法不使用实例。 遵循此建议最有可能是一个好主意,但您可能有几个理由忽略它。
忽略它的可能原因:
我确信可以有更多,但如果没有这些原因我会遵循这个建议。但是,如果该方法不属于该类(例如工厂方法或类似的东西),我会重构以使其不属于类。
答案 1 :(得分:1)
我认为你可能会混淆一些术语 - 例子不是class method。类方法接收类作为第一个参数,它们不接收实例。在这种情况下,您有一个不使用其实例的普通实例方法。
如果该方法不属于该类,则可以将其移出该类并使其成为标准函数。否则,如果它应该捆绑为类的一部分,例如它是一个工厂函数,那么你应该把它变成一个静态的方法,因为这个(至少)作为你班级用户的有用文档,该方法与课程相结合,但不依赖于它。国家。
使方法静态也具有优势,可以在类的子类中重写它。如果方法作为常规函数移出类之外,则无法进行子类化。