在直接引用时,是否可以创建一个代表Python中另一种类型的类?

时间:2009-03-30 23:52:10

标签: python class object

所以,如果我有一个类:

CustomVal

我希望能够表示文字值,所以就像在构造函数中设置它一样:

val = CustomVal ( 5 )

val.SomeDefaultIntMethod

基本上我希望CustomVal表示构造函数中指定的内容。

我不是在谈论知道如何处理CustomVal的自定义方法,而是将其作为我需要的另一个值。

这可能吗?

顺便说一下5只是一个例子,实际上它是一个我希望轻松实现的自定义COM类型。

因此,通过引用CustomVal,我将可以访问与int相关的功能(对于5),或者我想要表示的对象的功能(对于COM)。

因此,如果COM对象是RasterizedImage,那么我将直接访问其方法:

CustomVal.Raster () ...

编辑:这就是我的意思:我不想作为属性访问,而是对象本身:

CustomVal

而不是:

CustomVal.SomeAttribute

我想要这个的原因是因为COM对象过于复杂而无法通过这种方式进行初始化,它看起来就像应用程序提供的原始内部实现。

2 个答案:

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

我错过了什么吗?