在python中,下面的区别是什么,哪个是b

2024-09-29 00:15:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我写过这样的代码,它们都是为我工作的,但有什么区别呢?哪个更好?在

class Demo1(object):
    def __init__(self):
        self.attr = self._make_attr()
    def _make_attr(self):
        #skip...
        return attr

class Demo2(object):
    def __init__(self):
        self.attr = self._make_attr()
    @staticmethod
    def _make_attr():
        #skip...
        return attr

Tags: 代码selfmakereturnobjectinitdefclass
3条回答

如果这两个都有效,则意味着在make_attr中没有使用self。在

只有当代码可以在逻辑上依赖于实例,并且在当前实现中偶然不依赖于实例时,使它成为常规的非静态方法才有意义(但例如,它可能依赖于从该类派生的类中的实例)。在

说到功能,@staticmethod并不重要。它的值是语义的-您告诉自己或其他编码人员,即使这个函数属于类的名称空间,它也没有绑定到任何特定的实例。这种标记在重构代码或查找bug时非常有用。在

在任何一种情况下,attr都是局部变量,不依赖于类中的任何内容。结果是一样的。将其标记为static可以让您了解这一点,并能够直接访问它,例如Demo2.\u make_attr(),而不必创建类和类的实例。在

如果希望它访问类变量,可以将其引用为self.attr。但是如果您这样做,那么Demo2.\u make_attr()就不能再是静态的了。在

相关问题 更多 >