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

Joa*_*nge 1 python class object

所以,如果我有一个类:

CustomVal
Run Code Online (Sandbox Code Playgroud)

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

val = CustomVal ( 5 )

val.SomeDefaultIntMethod
Run Code Online (Sandbox Code Playgroud)

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

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

这可能吗?

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

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

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

CustomVal.Raster () ...
Run Code Online (Sandbox Code Playgroud)

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

CustomVal
Run Code Online (Sandbox Code Playgroud)

代替:

CustomVal.SomeAttribute
Run Code Online (Sandbox Code Playgroud)

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

dF.*_*dF. 7

在Python中包装对象的常用方法是__getattr__在类中覆盖:

class CustomVal(object):
    def __init__(self, value):
        self.value = value

    def __getattr__(self, attr):
        return getattr(self.value, attr)
Run Code Online (Sandbox Code Playgroud)

那么你就可以做到

>>> obj = CustomVal(wrapped_obj)
>>> obj.SomeAttributeOfWrappedObj
Run Code Online (Sandbox Code Playgroud)

您还可以分别覆盖__setattr____delattr__启用设置和删除属性(请参阅Python库文档).