Я хочу сделать библиотеку функций. И я хочу, чтобы каждая функция содержала «stati c information», которая указывает c на эту функцию (это self.meta_data
в модели ниже). И я хочу, чтобы функция могла ссылаться на эту информацию c. Очевидно, я мог бы создать класс, содержащий функции, которые имеют локальные переменные, которые содержат информацию о состоянии c. Тем не менее, я хочу иметь возможность собирать эту статистическую информацию время от времени; другими словами, информация о состоянии c должна быть доступна извне функции.
Модель, приведенная ниже, выполняет эти требования, создавая класс для каждой функции . Класс содержит "информацию о состоянии c", на которую может ссылаться функция, и эта информация о состоянии c может быть программно агрегирована при необходимости; она доступна извне функции.
В этой модели каждый класс внутри библиотеки предназначен для класса одного экземпляра .
Эта модель соответствует требованиям, описанным выше, но это кажется необычным и, вероятно, это анти-шаблон, поэтому мне интересно, есть ли лучший способ сделать это.
- Я не хочу использовать словарь, потому что мне нужно уметь чтобы получить доступ к функции и к "информации о состоянии c", используя точечную запись.
Я не хочу использовать __call__
, поскольку она слишком специфична c для Python.
class Variable():
def __init__(self, library, wrapper):
self.library=library
self.wrapper=wrapper
class Source():
def __init__(self):
pass
class Wrapper():
def __init__(self, source):
self.source=source
self.library=self.Library(self)
class Library():
def __init__(self, wrapper):
for variable in dir(self):
clss = getattr(self, variable)
try:
if issubclass(clss, Variable):
setattr(self, variable, clss(self, wrapper))
except:
pass
class variable_name(Variable):
def __init__(self, library, wrapper):
super().__init__(library, wrapper)
self.meta_data="Meta-data specific to this fn."
def fn(self):
print(self.wrapper)
print(self.library)
print(self.meta_data)
source = Source()
wrapper = Wrapper(source)
wrapper.library.variable_name.meta_data # Meta-data specific to this fn.
wrapper.library.variable_name.fn() # Wrapper, Library, Meta-data specific to this fn.