Получить ссылку на объект - PullRequest
       4

Получить ссылку на объект

0 голосов
/ 10 февраля 2020

Я пытаюсь создать класс, которому можно присвоить любой объект при создании, а затем в интерактивном режиме перечислить все вызываемые методы этого объекта. Я использую модуль PyInquirer для интерактивного приглашения и модуль inspect для получения всех методов данного объекта.

Мне до сих пор удалось динамически построить приглашение для любого данного объекта, но моя программа выдает ошибку Foo() takes 0 positional arguments but 1 was given при попытке вызвать один из методов из приглашения.

Я думаю, что причина ее сбоя в том, что во время выполнения больше нет ссылок на объект, поэтому его счетчик ссылок равен нулю, и объект освобождается.

Если бы я мог заставить класс сохранить собственную ссылку на объект, то это решит проблему. Например,

    def __init__(self, object):

        # Create a local reference the object
        self.__object = &object

Но это недопустимо python.

Как получить ссылку на объект (или вручную увеличить счетчик ссылок и вручную уменьшить его в __del__ function)?

Полный исходный код для ObjectMethodTerminal.py можно найти здесь https://gitlab.com/snippets/1939696

1 Ответ

2 голосов
/ 10 февраля 2020

Измените пример вашего класса:

class A:
    def Foo(self):
        print("Hello")

    def Bar(self):
        print("World")

    def Baz(self):
        print("!") 

Обратите внимание на добавленные self к параметрам метода.

Если вы пробовали этот код первым:

a = A()
a.Foo()

Вы бы нашли свою ошибку, прежде чем пройти длинный путь проверки класса.

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