将方法添加到sudsobject。猴子修补或导入新对象?

时间:2012-03-16 20:12:04

标签: python suds monkeypatching

我编写了一些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 个答案:

答案 0 :(得分:1)

像这样创建对象的子类:

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()