您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python中的指针?

Python中的指针?

我希望form.data['field']form.field.value始终拥有相同的价值

这是可行的,因为它涉及修饰的名称和索引-即与 a``b *** __

也许您不知道裸名和修饰名有多么大的不同。当您引用裸名时a,您将确切地知道该对象a在该范围中最后绑定到该对象(如果未在该范围内绑定则为例外),这是Python如此深入和基础的方面,它可以不可能被颠覆。当您引用修饰的 名称x.y,您正在要求一个对象(该对象所x引用的)请提供“y属性”-并响应该请求,该对象可以执行完全任意的计算(并且索引非常相似:它还允许作为响应执行任意计算)。

现在,您的“实际需求”示例很神秘,因为在每种情况下都涉及两个级别的索引编制或属性获取,因此可以通过多种方式引入您渴望的精妙之处。form.field例如,假设还具有其他哪些属性value?如果没有进一步的.value计算,可能性将包括

class Form(object):
   ...
   def __getattr__(self, name):
       return self.data[name]

class Form(object):
   ...
   @property
   def data(self):
       return self.__dict__

的存在.value表明采摘第一种形式,加上一种-的无用的包装:

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

class Form(object):
   ...
   def __getattr__(self, name):
       return KouWrap(self.data[name])

如果还应将这样的 赋值form.field.value = 23设置为中的条目form.data,则包装器的确必须变得更加复杂,而并非所有这些都没有用:

class MciWrap(object):
   def __init__(self, data, k):
       self._data = data
       self._k = k
   @property
   def value(self):
       return self._data[self._k]
   @value.setter
   def value(self, v)
       self._data[self._k] = v

class Form(object):
   ...
   def __getattr__(self, name):
       return MciWrap(self.data, name)

在Python中,后一个示例大致与您想要的“指针”意义相近-但至关重要的是要了解,这样的微妙只能与 索引 和/或 修饰的名称一起使用 , 像您最初要求的那样使用裸名!

python 2022/1/1 18:41:44 有264人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶