Это пример объекта python, с которым я работаю.Извлечение определенных полей из объекта python
class DataObj(object):
def __init__(self, cvid, cvname, address, get_info):
self.cvid = cvid
self.cvname = cvname
self.address = address
self.prof = PROF("Honda", "Jason Jones")
class PROF(object):
def __init__(self, organization, manager_name):
self.organization = organization
self.manager_name = manager_name
self.project_list = [Proj("asd", "asd"), Proj("asdsd", "asdsd")]
class Proj(object):
def __init__(self, projectname, projecttype):
self.projectname = projectname
self.projecttype = projecttype
Мне нужно написать функцию, которая принимает список полей и извлечь все поля, как ключевой пары значений из DataObj. Фокус в том, что он должен также искать атрибуты объекта, составленного внутри DataObj класс. например, если список полей [ «CVID», «организация», «Projectname»], он должен вернуть что-то подобное в следующем формате
{'cvid' : 'value', 'organization' : 'Honda', Proj :[{'projectname' : 'asd'}, {'projectname' : 'asdsd'}]
Где я должен написать эту функцию, так что мой код более модульная? Я думал о написании его внутри DataObj, но я не знал бы, какие атрибуты объекта состоят внутри DataObj. Как достичь того, что я пытаюсь сделать более объектно-ориентированным способом?
спасибо. Это решает мою проблему. –
Можете ли вы объяснить мне эту часть attrgetter (* names) (self)? –
@paris_serviola: 'attrgetter' выполняет функцию, которая извлекает предоставленные имена (имена) из того, что вызывается. Поэтому, если 'getname = attrgetter ('name')', то 'getname (foo)' эквивалентно 'foo.name'. С несколькими именами он возвращает 'tuple', поэтому' getfoobar = attrgetter ('foo', 'bar') 'делает объект таким, что' getfoobar (x) 'эквивалентен' (x.foo, x.bar) '. Таким образом, при распаковке звезды мы берем имена и создаем геттер для всех из них, а затем сразу же применяем геттер к объекту. При дальнейшем рассмотрении это не сработает, если «имена» - это только одно имя, поэтому вам понадобится специальный случай. – ShadowRanger