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

В JS вы можете сделать нечто подобное, назначить все ключи, значения объекта / dict, obj, чтобы они находились в глобальном пространстве имен / context obj с this[key] = obj[key]

Я ожидал, что смогучтобы сделать то же самое с

class A:
    def call(self):
        print('a')

a = A()

globals()['call'] = lambda: None
print(globals())
setattr(globals(), 'call', a.call)

, сбивает с толку то, что я получаю ошибку AttributeError: 'dict' object has no attribute 'call' , хотя вызов четко определен, когда я печатаю globals ()

1 Ответ

0 голосов
/ 27 декабря 2018
class A:
    def call(self):
        print('a')

    def call2(self):
        print('b')

a = A()

method_names = list(filter(lambda func: '__' not in func, dir(a)))
for func in method_names:
    globals()[func] = getattr(a, func)

# globals()['call'] = a.call
print(globals())
call()
call2()
# setattr(globals(), 'call', a.call)

Упс, перепутал атрибуты и ключи, когда они одинаковы в JS.спасибо

...