Скрытый метод вызываемый внутри класса почему-то выводит на печать self, хотя я его и не передавал
Помогите пожалуйста разобраться.
class A:
def __метод_2(*args):
print(*args)
def метод_1(self, *args):
self.__метод_2(*args)
obj = A()
obj.метод_1('привет')
Хочу снаружи запустить , метод_1 класса и передать ему ряд аргументов.
В свою очередь метод_1 должен обратиться к другому, в моём случае скрытому методу __метод_2, в этом же классе, и допустим вывести полученные аргументы на печать.
Чтобы обратиться к __метод_2, мне естественно приходится обратиться к нему через self - self.__метод_2(*args), и "О ЧУДО!", кроме переданных аргументов на печать выводится и self.
<main.A object at 0x020FEB08> привет
Не могу понять как это работает и как исправить.
Ответы (2 шт):
Добавьте методу 2 аргумент self
class A:
def method2(self, *args): # <---
print(*args)
def method1(self, *args):
self.method2(*args)
obj = A()
obj.method1('привет')
UPD
Как правильно заметил @n1tr0xs, аргумент передаётся автоматически.
Так что ещё как вариант - выводить только аргумент с индексом [1], игнорируя индекс [0]
class A:
def method2(*args):
print(args[1]) # <--
def method1(self, *args):
self.method2(*args)
obj = A()
obj.method1('привет')
Если вы не взаимодействуете с самим объектом self внутри метода и хотите его опустить, то можете воспользоваться встроенным декоратором @staticmethod
class A:
@staticmethod
def __method1(*args):
print(*args)
def method2(self, *args):
self.__method1(*args)
a = A()
a.method2('привет')
Такой статичный метод можно вызывать как у класса C.f(), так и экземпляра C().f().