Добавление методов в sudsobject. Исправление обезьян или импорт в новый объект? - PullRequest
0 голосов
/ 17 марта 2012

Я пишу некоторый код на Python, который использует suds для подключения к устройству, получения wsdl и запроса некоторой информации об устройстве. Эта часть кода работает, и похоже, что suds создает и размещает данные в этом объекте. Я хотел бы добавить к объекту метод printData, который будет распечатывать только те атрибуты, которые мне нужны, в определенном порядке и формате. Я могу импортировать данные в объект, который я явно объявляю, или написать функцию, а не объект, но я стремлюсь сохранить их в объекте, поэтому другой код не должен знать о деталях, поэтому более портативный.

Есть и другие объекты, поэтому я действительно хочу просто сказать .print и заставить его делать правильные вещи (tm), и любой, кто использует модуль, не должен знать или понимать внутреннее устройство.

Теперь я не вижу возможности попасть в класс sudsobject, чтобы добавить метод. Обезьяна исправляет путь, и если да, то есть ли какая-нибудь идея, как попасть в класс sudsobject, чтобы я мог добавить один или два метода?

>>> response = client.service.exportDevice(context)
>>> a=response[0]
>>> type(a)
<type 'instance'>
>>> dir(a)
['MACAddress', '__contains__', '__delattr__', '__doc__', '__getitem__', '__init__', '__iter__', '__keylist__', '__len__', '__metadata__', '__module__', '__printer__', '__repr__', '__setattr__', '__setitem__', '__str__', '__unicode__', 'addressType', 'aliases', 'container', 'description', 'deviceType', 'domainName', 'domainType', 'dupWarning', 'excludeFromDiscovery', 'hostname', 'hwType', 'id', 'ipAddress', 'resourceRecordFlag', 'userDefinedFields']
>>> a.__class__
<class suds.sudsobject.WSDevice at 0x101323940>
>>> b=suds.sudsobject.WSDevice()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'WSDevice'

1 Ответ

1 голос
/ 17 марта 2012

Создайте подкласс объекта следующим образом:

class Subclass(parentClass):
  def newMethod(self):
    print self.someVariableDefinedInTheParentClass

Вот рабочий пример:

class apple:
  def __init__(self):
    self.color = 'red'

class betterClass(apple):
  def printColor(self):
    print self.color

a = betterClass()
a.printColor()
...