python, динамически реализовать класс на thefly - PullRequest
2 голосов
/ 18 апреля 2011

Flocks, у нас есть структура, которая позволяет нашим исследователям изменять методы (операции) в классе, чтобы соответствовать их потребностям при сохранении этих изменений. Например, рассмотрим определение класса foo ниже. (с версией 1 и версией 2)

class foo:
   #class version 1
   def operation_1(self):
       # version 1
        pass
   def operation_2(self):
       # version 1
       pass

class foo:
     # class version 2
     def operation_1(self):
        # version 2
        pass
     def operation_2(self):
        # version 2
        pass

другой исследователь может захотеть, чтобы его класс выглядел так, как показано ниже; (он использует метод из версии 1 и другой метод из версии 2)

class foo:
    # class version 3
    def operation_1(self):
        # version 1
        pass
    def operation_2(self):
       # version 2
        pass

В настоящее время необходимо скопировать и вставить исходный код. Я ищу способ обобщить это. наверное что-то вроде

  klass = foo()
  klass.operation_1 = foo.operation_1 #  from ver 1 of foo
  klass.operation_2 = foo.operation_2 #  from ver 2 of foo
  evaluate(klass)

и, вероятно, define () - это функция, которая оценивает такие выражения. Эти классы являются постоянными

1 Ответ

2 голосов
/ 18 апреля 2011

type - метакласс, который вы хотите.

klass = type('klass', (foo,), {'operation_1': foo.operation_1,
  'operation_2': foo.operation_2})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...