带有类方法的Python类

时间:2019-03-11 02:25:28

标签: python-2.7

我有一个像下面这样的python类

def function1():
   return=1+1

class Collection()
...
@classmethod
def get_allobjects(cls):
      ..logic here..
      retval = function1()  

function1是从外部类封装的,但需要可用于get_allobjects。定义此功能的最佳方法是什么?应该将其定义为类方法,还是可以将其作为独立函数保留在同一python文件中(在类之前定义?)?有关样式的任何建议或建议,将不胜感激。

谢谢, 杰夫

1 个答案:

答案 0 :(得分:3)

这实际上取决于上下文。您的选择:

  • 全局函数
    如您的示例代码。这将使该函数对所有导入您的模块的人都可见,就像类本身一样。
def function1():
    return=1+1
        function1()
  • 具有全局功能但具有“隐藏”功能
    使用以_开头的名称表示不应在外部使用它。人们仍然可以,但是会发出警告。
def _function1():
    return=1+1
        _function1()
  • 一个类方法
    这仅在方法需要访问类上的某些东西时才有意义,这就是为什么将方法传递给该类的引用。
    @classmethod
    def function1(cls):
        return=1+cls.some_class_attribute
        self.function1()
  • 静态方法
    这可能就是您要查找的内容,因为它将访问该功能的权限限制为有权访问该类(或实例)的任何人,但不允许访问该类或实例本身。
    @staticmethod
    def function1():
        return=1+1
        self.function1()
  • 最后,您可能想隐藏类或静态方法
    出于与以前相同的原因,也许您只希望类本身中的方法具有访问权限,而不是拥有类或实例的每个人都可以访问。
    @staticmethod
    def _function1():
        return=1+1
        self._function1()

这全部取决于您希望函数的可见性以及函数的逻辑是否真正独立于类,或者仅在类的上下文中有意义。

还有更多选择,例如将函数定义为方法本身的子函数,但这仅在函数本身的构造在某种程度上取决于类/对象的状态时才有意义。