在类方法中构造私有方法的正确方法是什么?

时间:2019-03-27 19:44:24

标签: python oop

构造将在类方法中调用的私有方法的正确方法是什么?有一种私有类方法吗?

class Foo:
    def _bar(self):
        # do something

    @classmethod
    def bar(cls):
        cls._bar()


>> Foo.bar()

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 7, in bar
TypeError: unbound method _bar() must be called with Foo instance as first argument (got nothing instead)


2 个答案:

答案 0 :(得分:0)

如果您需要在类方法中引用实例(我看不到为什么),只需将其作为参数传递即可:

class Foo:
    def _bar(self):
        pass

    @classmethod
    def bar(cls, inst):
        cls._bar(inst)

但是也许_bar实际上应该是在classmethod中被调用的staticmethod

class Foo:
    @staticmethod
    def _bar():
        pass

    @classmethod
    def bar(cls):
        cls._bar()

正如评论中指出的那样,Python没有私有方法,也没有属性。

答案 1 :(得分:-2)

您可以使用名称修饰来创建私有类方法:

class Foo:
    @classmethod
    def __bar(cls):
        print('__bar')

    @classmethod
    def bar(cls):
        cls.__bar()