Думаю, самый питонский способ - это модуль:
#!/usr/env/bin/python
def dynamic_load_from_module(): pass
def dynamic_load_from_another_module(): pass
fun_map = dynamic_load_from_module()
ad_map = dynamic_load_from_another_module()
Так что вы используете его как модуль:
from module import fun_map, ad_map
class Foo(object):
@classmethod
def check_ad(cls,host,port,user):
return ad_map[user].check()
Но если вам нужно, чтобы они вызывались при создании вашего экземпляра, вы можете захотеть сделать что-то вроде
#!/usr/env/bin/python
def dynamic_load_from_module(): pass
def dynamic_load_from_another_module(): pass
(То есть вы просто определяете функции внутри модуля)
from module import dynamic_load_from_module, dynamic_load_from_another_module
class Foo(object):
def __init__(self):
self._fun_map = dynamic_load_from_module()
self._ad_map = dynamic_load_from_another_module()
Или, если вам нужно, чтобы они вызывались при создании экземпляра, но при этом оставались атрибутом класса:
from module import dynamic_load_from_module, dynamic_load_from_another_module
class Foo(object):
_fun_map = dynamic_load_from_module()
_ad_map = dynamic_load_from_another_module()
Существует множество других способов (свойства, метод класса, статические методы и т. Д.), Но я уверен, что этот модуль является наиболее питоническим. Более того, его действительно легко настроить, прочитать и понять - так почему бы и нет.