Я создаю пользовательский класс для хранения информации о результатах моделирования CFD.
Сейчас он настроен так, что создает экземпляр пустого объекта класса, а затем использовал метод с именем load_mesh
которая вызывает внешнюю функцию, чтобы прочитать всю информацию обо мне sh и вернуть словарь всей информации. Затем метод load_mesh
назначает кучу атрибутов класса из значений в словаре.
Проблема в том, что я планирую хранить гораздо больше информации, чем просто me sh, и я не хочу иметь как 1000 атрибутов для моего объекта класса. Я хочу хранить в соответствующих контейнерах (?), Каждый из которых имеет свои собственные методы.
Например, мой код выглядит следующим образом (некоторые вещи опущены, но это не нужно):
class CFD():
def __init__(self, infile=None):
self.file = infile
def load_mesh(self):
mesh = load_cfd_mesh(self) #calls outside function to load mesh info, uses self.file, returns dict
self.proj = mesh['proj']
self.static_items = mesh['static_items']
self.nnodes = mesh['nnodes']
self.node_coords = mesh['node_coords']
self.node_codes = mesh['node_codes']
self.nelements = mesh['nelements']
self.element_types = mesh['element_types_str']
self.node_connectivity = mesh['node_connectivity']
self.element_node_ids = mesh['element_node_ids']
self.element_coords = mesh['element_coords']
self.element_elevs = mesh['element_elevs']
self.horizontal_units = mesh['horizontal_units']
self.vertical_units = mesh['vertical_units']
test = CFD('testfile.txt') #instantiate
test.load_mesh() #load mesh information to attributes
Теперь я могу получить доступ к любой информации me sh, выполнив:
test.proj
self.nnodes
self.coords
et c ...
Но хочу, чтобы я хотел это сохранить всю эту информацию в test.mesh
, где test.mesh
имеет все эти атрибуты, но также имеет метод test.mesh.load()
.
Я думаю, я могу сделать что-то вроде этого:
class CFD():
def __init__(self, infile=None):
self.file = infile
self.mesh = None
def load_mesh(self):
mesh = load_cfd_mesh(self) #calls outside function to load mesh info, uses self.file, returns dict
setattr(self.mesh, 'proj', mesh['proj'])
#etc....
тогда я ' я мог бы сделать:
test = CFD('testfile.txt') #instantiate
test.load_mesh() #load mesh information to attributes
test.mesh.proj
Но я не могу понять, как добавить load_mesh
метод к self.mesh
?
Как можно добиться следующим образом делать это:
test = CFD('testfile.txt') #instantiate
test.mesh.load() #load mesh information to attributes
test.mesh.proj
Должен ли я определить другой класс в основном классе? Как и class mesh(self):
Кроме того, если мой предложенный способ добавления атрибутов в self.me sh не имеет смысла .., пожалуйста, помогите!