Я работаю над созданием образца XML из подмножества файла схемы XSD.Я сгенерировал объекты данных, используя GenerateDS.Я создал родительский объект и использую рекурсию с отражением, чтобы заполнить все дочерние объекты, чтобы я мог записать XML этого родительского объекта и всех его дочерних объектов.Позже я хочу заполнить все атрибуты данных тестовыми данными для создания моего тестового XML.
У меня проблема с кодом GenerateDS, сгенерированным из моего XSD.Я не уверен, что это мое непонимание объектно-ориентированного программирования на Python или проблема с библиотекой, и, возможно, кто-то может мне помочь с этим.Вот проблема.Когда я запускаю метод экспорта, он выполняет self.exportChildren(outfile, level + 1, '', namespacedef_, name_='requestHeaderType', pretty_print=pretty_print)
и передает файловый объект в выходной файл, а уровень находится на 0 + 1
, но проблема в том, что когда выполняется exportChildren, и вот параметры, self.Header.export(outfile, level, namespaceprefix_, namespacedef_='', name_='Header', pretty_print=pretty_print)
параметр outfile в экспорте заголовкаМетод принимает значение уровня.
Сигнатура метода экспорта заголовка: export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='Header', pretty_print=True):
Я создал классы в Python и раньше, и когда я вызывал методы класса, аргумент self пропускался ипервый аргумент, который я передаю в вызов метода, будет следующим после параметра self.Однако в этом случае вызов метода перезаписывает себя с помощью outfile, и мой объект Header становится объектом File.Это странно, и я не понимаю, почему это произошло.
Я запускал его на Anaconda с Python 3.6 в моем отладчике кода Visual Studio.
Вот код, который я создал.
import po3
def get_class( kls ):
parts = kls.split('.')
module = ".".join(parts[:-1])
m = __import__( module )
for comp in parts[1:]:
m = getattr(m, comp)
return m
def recursiveInstantiation(obj):
for key in vars(obj).keys():
if '_' not in key and \
'subclass' not in key and \
'superclass' not in key and \
'factory' not in key and \
'export' not in key and \
'build' not in key:
subClass = recursiveInstantiation(get_class('po3.' + key))
getattr(obj, 'set_' + key)(subClass)
return obj
er = recursiveInstantiation(po3.EstablishRequest())
print(er.get_requestHeaderType()) # returns requestHeaderType object
print(er.get_requestHeaderType().get_Header()) # returns an exception posted below
#with open('file.xml', 'w') as outfile:
# er.export(outfile, 0) # calling this produces the behavior I described above
Вот вывод, когда я запускаю этот скрипт:
<class 'po3.requestHeaderType'>
Traceback (most recent call last):
File "c:\Users\arychlik\Desktop\New folder (3)\generateXml.py", line 26, in <module>
print(er.get_requestHeaderType().get_Header())
TypeError: get_Header() missing 1 required positional argument: 'self'
Я ожидаю, что вызов метода пропустит параметр selfно на самом деле он присваивает значение себе, он перезаписывает его объектом File.