模拟python类attribu的指针式行为

2024-04-23 15:39:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图为python3类属性模拟类似指针的行为。 在下面的示例中,我希望obj.b指向obj.a,这样,如果obj.a值在运行时更改,obj.b值将更改为

   # not working as expected
   class A:
      def __init__(self, value):
         self.a = value
         self.b = getattr(self, 'a')
   obj = A('banana')
   # now changing my mind
   obj.a = 'apple'
   # I would like to have obj.b == 'apple', not 'banana' 

我想我正在尝试做一个肮脏的把戏,应该更好地避免,但对于我的具体任务,这将是非常有帮助的


Tags: selfobj示例apple属性valueasnot
1条回答
网友
1楼 · 发布于 2024-04-23 15:39:19

您可以将obj.b设置为属性:

class A:
    def __init__(self, value):
        self.a = value

    @property
    def b(self):
        return self.a

    obj = A('banana')
    # now changing my mind
    obj.a = 'apple'
    print(obj.b) # apple

当然,还有比这更重要的东西。例如,如果您尝试这样做:

obj.b = 'orange'

它将失败,因为您无法设置该属性。但是这个

obj.a = 'orange'

总是有效的,这个测试总是True

obj.a == obj.b

控制台中的工作示例:

>>> class A:
...     def __init__(self, value):
...             self.a = value
...     @property
...     def b(self):
...             return self.a
...
>>> a = A('apple')
>>> a.a
'apple'
>>> a.b
'apple'
>>> a.a = 'orange'
>>> a.b
'orange'
>>> a.b = 'hello'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: can't set attribute

相关问题 更多 >