import json
class Myclass():
def __init__(self):
with open("file_name.json", "r") as read_file:
data = json.load(read_file)
for key in data:
print key
key = getattr(self,'func_name')
def func_name(self,arg):
print "Pass"
obj = Myclass()
obj.func_name("test")
obj.key_from_file("test")
Выход:
key_from_file
Pass
Traceback (most recent call last):
File "get_at.py", line 22, in <module>
obj.key_from_file("test")
AttributeError: Myclass instance has no attribute 'key_from_file'
Я хочу динамически сопоставить все ключи в файле json с func_name, поэтому всякий раз, когда мы вызываем obj.key_from_file ("test"), который должен вызывать obj.func_name ("test")
Как это сделать ?
Дубликат: stackoverflow.com/questions/285061/…
Возможный дубликат Как программно установить атрибут?






Используйте setAttr для установки атрибута в объекте:
import json
class Myclass():
def __init__(self):
with open("file_name.json", "r") as read_file:
data = json.load(read_file)
for key in data:
print key
setattr(self, key, self.func_name) #we create an attr with the key as name and the funct_name function as value.
def func_name(self,arg):
print "Pass"
obj = Myclass()
obj.func_name("test")
obj.key_from_file("test")
Вот у вас есть живой пример
Как это отвечает на вопрос? Код по-прежнему будет генерировать то же исключение.
@ Аран-Фей, нет, не будет, если ключ находится в файле json
Таким образом, вопрос буквально сводится к следующему: «Как мне динамически установить атрибут»? У нас на это есть дураки.
Я не понимаю вопроса. Вообще. Почему вы ожидаете, что
objбудет иметь методkey_from_file, даже если вы никогда его не определяли? А в чем смысл методаfunc_name?