Python作为函数访问对象(不是__call__)

时间:2010-07-22 12:02:40

标签: python

我想做以下事情:我有一个容器级容器,它有 属性attr,它引用另一个类OtherClass。

class OtherClass:
    def __init__(self, value): 
        self._value = value 

    def default(self): 
        retirn self._value 

    def another(self): 
        return self._value ** 2 

    def as_str(self): 
        return 'String: %s' % self._value

class Container: 
    def __init__(self, attr): 
        self.attr = OtherClass(attr)

我想:

x = Container(2) 

x.attr # when accessing the attribute - return value from default method
2 
x.attr.another() # but also an attribute can be treated as an object 
4 
x.attr.as_str()
'String: 2'

我该怎么做?

3 个答案:

答案 0 :(得分:2)

不确定这是否是您所需要的。对我来说似乎是一个奇怪的设计

>>> class OtherClass(int):
...     def __init__(self, value): 
...         self._value = value 
...     def another(self): 
...         return self._value ** 2 
... 
>>> class Container: 
...     def __init__(self, attr): 
...         self.attr = OtherClass(attr)
... 
>>> x=Container(2)
>>> x.attr
2
>>> x.attr.another()
4

只是 - 因为你使用类 - 并不意味着它是OO-lyn gnibbler

答案 1 :(得分:0)

除非OtherClass覆盖__int__(),否则您不能通过int()来获取整数值。

答案 2 :(得分:0)

attr是什么意思?你无法双管齐下;要么它是某个函数的返回值,要么是OtherClass的实例。

如何让OtherClass继承自Integer