Как правильно структурировать частные методы, которые будут вызываться внутри метода класса? - PullRequest
0 голосов
/ 27 марта 2019

Как правильно структурировать частные методы, которые будут вызываться внутри метода класса? Есть такая вещь как приватный метод класса?

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 голосов
/ 28 марта 2019

Вы можете использовать искажение имени для создания частного метода:

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

    @classmethod
    def bar(cls):
        cls.__bar()
0 голосов
/ 27 марта 2019

Если вам нужна ссылка на экземпляр в методе класса (я не понимаю, зачем вы это делаете?), Просто передайте его в качестве аргумента:

class Foo:
    def _bar(self):
        pass

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

Но, может быть, _bar на самом деле должен быть staticmethod для вызова в classmethod?

class Foo:
    @staticmethod
    def _bar():
        pass

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

Как указано в комментариях, Python не имеет ни частных методов, ни атрибутов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...