Как динамически добавлять функции в класс на основе некоторых критериев.
Например, у меня есть следующий класс:
class A(object):
def __init__(self,type):
self.type = type
Теперь, основываясь на значении типа, я хочу добавить функции из класса B или класса C в класс A.
Например.
lass B(object):
def fun1(self):
print 'fun1'
def fun2(self):
print 'fun2'
class C(object):
def fun3(self):
print 'fun3'
def fun4(self):
print 'fun4'
Если значение атрибута 'type' класса A равно 'B', то динамически добавлять функции класса B (т. Е. Fun1 и fun2) в класс A или, если значение атрибута 'type' равно 'C', добавлять функции класса C в класс A (т.е. fun3 и fun4) в класс A, так что в дальнейшем в моем коде я могу получить доступ к этим функциям как A.fun1 () или A.fun3.
Я предполагаю, что метапрограммирование может помочь мне в этом, но я понятия не имею, как это сделать. Пожалуйста, руководство.
Далее я должен создать объекты класса A и иметь возможность использовать эти функции через эти объекты класса A.
a = class A(type='B')
a.fun1() #should work
Пожалуйста, помогите, поскольку я не могу понять это.
Это часть моего кода.
class Group(object):
def __init__(self,type):
if type == 'source'
self.mgr = SManager(self) #grp_mgr
elif type == 'target'
self.mgr = TManager(self)
def __getattr__(self,name):
if hasattr(self.mgr,name):
return getattr(self.mgr,name)
return AttributeError
class SManager(object):
def __init__(self,groupobj):
self.some_list = []
self.groupobj = groupobj
def doProcess(self):
#this function accesses self.groupobj
pass
def get_valid_list(self):
#this function accesses self.groupobj
pass
Но при этом я получаю следующую ошибку.
if hasattr(self.mgr,name):
File "c:\workspace\project\dev.py", line 27, in __ge
tattr__
if hasattr(self.mgr,name):
File "c:\workspace\project\dev.py", line 27, in __ge
tattr__
if hasattr(self.mgr,name):
File "c:\workspace\project\dev.py", line 27, in __ge
tattr__
if hasattr(self.mgr,name):
File "c:\workspace\project\dev.py", line 27, in __ge
tattr__
if hasattr(self.mgr,name):
File "c:\workspace\project\dev.py", line 27, in __ge
tattr__
if hasattr(self.mgr,name):
RuntimeError: maximum recursion depth exceeded while calling a Python object
Я не могу понять, где я совершаю ошибку. Прежде чем включить это, я попробовал этот пример с простым фрагментом, который работал, но когда я сделал то же самое в реальном коде, это выдает ошибку.
Просьба помочь