Метод в словаре не определен - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть метод в словаре как атрибут класса;

class parentClass(object):
    pass

class childClass(parentClass):
    a = {'meth': my_meth}

    def my_meth(self, var):
        print(var)

inp = input()
# User enters 'meth' 
childClass.a[inp]('test')

Когда я запускаю программу, я получаю ошибку;

NameError: name 'my_meth' isне определено

Я прочитал функции, являющиеся гражданами первого класса в Python.Как я могу назначить метод в качестве значения в словаре, чтобы я мог вызвать его позже с определенными параметрами?

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Проблема с вашим кодом заключается в том, что вы устанавливаете a как статическую переменную в классе, но метод в классе не является статическим и требует параметра self .

Чтобы решить эту проблему, вы можете связать переменную a с экземплярами, установив ее в методе __ init __ :

class parentClass(object):
    pass

class childClass(parentClass):

    def __init__(self):
        self.a = {'meth': self.my_meth}

    def my_meth(self , var):
        print(var)

childClass().a['meth']('Helloworld')

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

class parentClass(object):
    pass

class childClass(parentClass):


    def my_meth(var):
        print(var)

    a = {'meth': my_meth}

x = childClass.a['meth']("Helloworld")
0 голосов
/ 25 ноября 2018
class parentClass(object):
    pass

class childClass(parentClass):

    def __init__(self):

        self.a = {'meth': self.my_meth}

    def my_meth(self, var):
        print(var)


c = childClass()
c.a['meth']('test')

Вы должны определить переменные экземпляра в __ init __ .

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