python引用float,int,

2024-09-30 03:25:48 发布

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

据我所知,python中没有对ints或floats或类似数据的引用。尽管如此,我正在研究一个问题,如果我可以做一些

a=1
b=2
c=3
ref_dict={'field1':ref_to_var_a,'field2':ref_to_var_b,'field3':ref_to_var_c}

然后呢

^{pr2}$

所以如果用户打电话

update('field2',5)

b的值将变为5。在

有什么办法可以做到吗?谢谢。在

作为对阿班内特有用的评论和回答的回应,我真正想做的是——惊喜,惊喜——更复杂。我正在用wxPython构建一个GUI。我有许多textcrl控件,每个控件都将设置一个变量的值。当然,我可以为每个控件编写一个方法,也可以编写一个方法,看起来像

def handleTextEvent(self,event):
    if (event.GetEventObject() == widget1):
       a=int(event.GetString)
    elif (event.GetEventObject() == widget2):
       b= ....

我想你也明白我为什么不喜欢这个了。如果我能做一个简短的功能就好了,比如:

def handleTextEvent(self,event):
    ref_dict[event.GetEventObject()]=int(event.GetString())

是的,我对wxPython很陌生。在

谢谢!在


Tags: to方法selfeventrefvardefwxpython
1条回答
网友
1楼 · 发布于 2024-09-30 03:25:48

这是可能的,但几乎总是个坏主意。在

假设ab、和{}是全局变量:

ref_dict = {'field1': 'a', 'field2': 'b', 'field3': 'c'}
def update(field, value):
    globals()[ref_dict[field]] = value

如果你真的想要,你甚至可以创建“引用包装器”:

^{pr2}$

如果你想包装那些不在globals中的东西,比如来自另一个模块的全局变量、类属性、实例属性等等。?创建更多引用包装类型:

class NamespaceReference(object):
    def __init__(self, namespace, name):
        self.namespace, self.name = namespace, name
    def get(self):
        return getattr(self.namespace, self.name)
    def set(self, value):
        setattr(self.namespace, self.name, value)

ref_dict = {'field1': GlobalReference('a'), 'field2': NamespaceReference('myobj', 'b')}

或者你可以放弃类而只存储setter函数


那么,如果这是个坏主意,正确的答案是什么?在

如果不知道自己想做什么,很难说,但以下是一些可能性:

  • 使用一个dict个充满值的变量,而不是一堆单独的变量。在
  • 使变量成为类的实例属性,并传递该类的实例。在
  • 使用可变的float holder对象而不是普通的float实例。在

对于你的具体情况,我想你想要的是第二个。这是标准的模型-视图-控制器设计。或者,如果您不喜欢MVC、模型模板视图或其他一些变体(这里不需要控制器)。在

你的模型是一堆分散的全局变量,这就是为什么很难将它与视图联系起来。最简单的答案是将模型表示为对象。然后给视图(或它的控制器)一个对这个模型的引用,这很简单,就完成了。在

相关问题 更多 >

    热门问题