python中有指针吗_Python中的指针?

I want form.data['field'] and

form.field.value to always have the

same value

这是可行的,因为它涉及修饰名称和索引——即,完全不同于您所要求的裸名称a和b的不同构造,并且您的请求是完全不可能的。为什么要问一些不可能的事情,与你真正想要的(可能的)事情完全不同?!

也许你不知道光名和修饰名有多么不同。当你引用一个裸名a时,你得到的正是这个作用域中最后绑定到的对象a(如果它没有绑定在这个作用域中,则是一个异常)——这是Python的一个非常深入和基本的方面,它不可能被颠覆。当您引用修饰的名称x.y时,您要求一个对象(对象x引用)提供“the y属性”--并且响应该请求,该对象可以执行完全任意的计算(索引非常相似:它还允许响应执行任意计算)。

现在,您的“实际desiderata”示例很神秘,因为在每种情况下都涉及两个级别的索引或属性获取,所以您渴望的微妙之处可以通过多种方式引入。例如,除了value之外,form.field还有哪些其他属性?如果没有进一步的计算,可能包括: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中,后一个示例与您所希望的“指针”的含义几乎一样接近——但必须理解,这种微妙之处只能与索引和/或修饰名称一起使用,而不能像您最初要求的那样使用裸名称!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值