Передача аргументов в экземпляр класса - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...