所以,如果我有一个类:
CustomVal
我希望能够表示文字值,所以就像在构造函数中设置它一样:
val = CustomVal ( 5 )
val.SomeDefaultIntMethod
基本上我希望CustomVal表示构造函数中指定的内容。
我不是在谈论知道如何处理CustomVal的自定义方法,而是将其作为我需要的另一个值。
这可能吗?
顺便说一下5只是一个例子,实际上它是一个我希望轻松实现的自定义COM类型。
因此,通过引用CustomVal,我将可以访问与int相关的功能(对于5),或者我想要表示的对象的功能(对于COM)。
因此,如果COM对象是RasterizedImage,那么我将直接访问其方法:
CustomVal.Raster () ...
编辑:这就是我的意思:我不想作为属性访问,而是对象本身:
CustomVal
而不是:
CustomVal.SomeAttribute
我想要这个的原因是因为COM对象过于复杂而无法通过这种方式进行初始化,它看起来就像应用程序提供的原始内部实现。
答案 0 :(得分:7)
在Python中包装对象的常用方法是覆盖类中的__getattr__
:
class CustomVal(object):
def __init__(self, value):
self.value = value
def __getattr__(self, attr):
return getattr(self.value, attr)
那么你可以做到
>>> obj = CustomVal(wrapped_obj)
>>> obj.SomeAttributeOfWrappedObj
您还可以覆盖__setattr__
和__delattr__
以分别启用设置和删除属性(请参阅the Python library documentation)。
答案 1 :(得分:2)
你可能正在过度思考......你可以把你想要的任何东西放到你的val
中,然后调用你想要的任何对象的方法:
>>> val = ThingaMoBob(123, {p:3.14}, flag=False)
>>> val.SomeCrazyMathod()
我错过了什么吗?