Dynami c Python Класс данных - PullRequest
       112

Dynami c Python Класс данных

0 голосов
/ 20 июня 2020

Мне нужно минимизировать количество ответов API. Один из способов сделать это - удалить нулевые атрибуты. Это ставит задачу создать класс данных, который я могу создавать динамически.

Мне удалось создать класс Dynami c, содержащий необходимые мне данные (просмотр в журнале). Но мне не удалось вставить его в родительский класс. Часть ParentClass - это Emtpy с этим logi c.

@dataclass
class VR: pass

@dataclass
class ResultParent:
    validationResult: VR
    matchCandidate: List[matchCandidates] = field(default_factory=list)

  #create and pop dynamic class
  vr = VR()
  if valres.matchStatusCode is not None:
       vr.matchStatusCode = valres.matchStatusCode
  if valres.matchStatusReason is not None:
       vr.matchStatusReason = valres.matchStatusReason
  ...

  #This pprint works and the attr/values are what we want
  pprint(vars(vr))  
 
  #Create ParentClass
  obj = ResultParent([vr],[])

  # The result of the above command is empty

  #Code then continues on to populate matchCandidates and then the ParentClass - no issues there


 


1 Ответ

0 голосов
/ 22 июня 2020

Мне удалось sh это сделать. Я добавил setattr, который добавляет attr, только если он не NONE. Нашел в этом посте . Что и было желаемым результатом.

@dataclass
class VR: 
    def __setattr__(self, name, value):
        if value is not None:
            self.__dict__[name] = value

@dataclass
class ResultParent:
    validationResult: VR
    matchCandidate: List[matchCandidates] = field(default_factory=list)


vr = VR()
vr.matchStatusCode = p.get('ValAddrStatus')
vr.matchStatusReason = p.get('ValAddrStatusCode')
...

obj = ResultParent([vars(vr)],[])

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