У меня есть 1 класс, определенный во время выполнения, который наследуется от класса, определенного на основе типа: MasterData или Transaction, который, в свою очередь, наследуется от BusinessDocument. - Класс BusinessDocument должен наследоваться от класса [Thing] [2], который доступен через внешний модуль.
Следующий код был реализован для создания всех классов в цепочке:
from owlready2 import *
with onto:
class BusinessDocument(Thing):
@staticmethod
def get_class(doc_type):
switch = {
'MasterData': MasterData,
'Transactional': Transactional
}
cls = switch.get(doc_type, lambda: "Invalid Noun Type")
return cls
def __init__(self, doc_id, location, doc_type, color, size):
self.doc_id = doc_id
self.location = location
self.doc_type = doc_type
self.color = color
self.size = size
@property
def get_location(self):
return self.location
@property
def get_doc_id(self):
return self.doc_id
with onto:
class MasterData(BusinessDocument):
def __init__(self, doc_id, location, color, size):
BusinessDocument.__init__(self, doc_id, location, color, size, 'MasterData')
with onto:
class Transactional(BusinessDocument):
def __init__(self, doc_id, location, color, size):
BusinessDocument.__init__(self, doc_id, location, color, size, 'Transactional')
with onto:
class NounClass():
@staticmethod
def get_class(doc_name, doc_type):
return type(doc_name, (BusinessDocument.get_class(doc_type),
BusinessDocument, ),dict.fromkeys(['doc_id', 'location', 'color', 'size',]))
Во время выполнения я получаю новый класс, вызывая:
InvoiceClass = NounClass.get_class('Invoice', 'Transactional')
Через пару дней борюсь с ошибками при попытке создать экземпляр класса, вызвав InvoiceClass ('INV01', 'New York' , 'Blue', 'Large'), я обнаружил, что класс Thing создаст экземпляр, только если я сделаю вызов в формате:
InvoiceClass(doc_id = 'INV01', location = 'New York', color = 'Blue', size = 'Large')
Я ищу некоторые предложения о том, как я мог бы обрабатывать создание экземпляров с помощью обычного метода. Я подумал, может быть, реализовать метод init для передачи свойств в Thing в ожидаемом формате, но я не уверен, как go об этом.
Заранее спасибо.
- MD