如何默认返回实例的属性

时间:2015-03-24 22:37:14

标签: python

在我的代码中,我有一个数据存储,其中多个变量设置为类似于下面的类的实例。 (原因是这个Interval类有很多运算符覆盖函数。)

class Interval(object):

    def __init__(self, value):
         self.value = value


data_store.a = Interval(1)

我希望对data_store.a的任何引用都返回self.value而不是Interval实例。这可能吗?

2 个答案:

答案 0 :(得分:1)

作为Malik's answer的替代方案,您可以a@property,Pythonic等效于getset,用于管理对内部属性的访问:

class DataStore(object):

    def __init__(self):
        self.a = Interval(1)

    @property
    def a(self):
        return self._a.value

    @a.setter
    def a(self, value):
        self._a = value

此处_a private-by-convention 属性,用于存储Interval实例。这可以按你的需要工作:

>>> store = DataStore()
>>> store.a
1

答案 1 :(得分:0)

您需要扩展其属性为间隔对象的数据存储:

class DataStore(object):

    def __init__(self):
        self.a = Interval(1)

    def __getattribute__(self, attr):

        if attr == 'a':
            return object.__getattribute__(self, 'a').value

        if attr != 'a':
            return object.__getattribute__(self, attr)