我的IDE一直建议我将实例方法转换为静态方法。我想是因为我在这些方法中没有引用任何self。在
例如:
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的建议而失去了什么,还是还有更多呢?在
我认为您可能混淆了一些术语-示例不是class method。类方法将类作为第一个参数接收,而不接收实例。在这种情况下,您有一个普通的实例方法,它没有使用它的实例。在
如果方法不属于类中,则可以将其移出类并使其成为标准函数。否则,如果它应该作为类的一部分绑定,例如,它是一个工厂函数,那么您可能应该使它成为一个静态方法,因为这(至少)可以作为有用的文档向类的用户说明该方法是耦合到类的,但不依赖于它的状态。在
使方法成为静态的还有一个优点,即可以在类的子类中重写它。如果方法作为常规函数移到类之外,那么子类化是不可能的。在
这是一个工作流程的问题,你的设计意图,也是一个主观的决定。在
首先,您是对的,您的IDE建议将方法转换为静态方法,因为该方法不使用实例。遵循这个建议很可能是个好主意,但您可能有一些理由忽略它。在
忽略它的可能原因:
我相信可以有更多的,但是如果没有这些原因,我会遵循这个建议。但是,如果方法不属于类(例如工厂方法或类似的方法),我会将它重构为不属于类的一部分。在
相关问题 更多 >
编程相关推荐