关于python语法,你可以做一些有趣的事情。在
当我从matlab转到python时,我创建了一个类似于matlab的struct的类
class DynStruct(AbstractPrintable):
' dynamical add and remove members '
def __init__(self, child_exclude_list=[]):
super(DynStruct, self).__init__(child_exclude_list)
它只是一个对象,您可以在其中动态添加成员,而不必这样做 查字典(因为我讨厌打引号)
我还制作了一个很酷的helper类,可以很好地打印出类的成员,这样您就可以 在IPython工作时看看你在做什么。(我省略了我的进口产品,但它只是一些标准的东西和一些新的东西)
^{pr2}$然后我有一个例子,我需要从DynStruct中获取一组元素,所以我添加了一个函数,它返回我想要的元素的元组。在
^{3}$例如:
>> point = DynStruct()
>> point.x = 3
>> point.y = 1
>> point.z = 60
>> print point
DynStruct
int x = 3
int y = 1
int z = 60
>> # Now I want to get the points
>> (x,y,z) = point.getprops('x','y','z')
现在,这很好用,它使调试变得非常容易。但我遇到了一个案例,我想同时设置一系列属性(类似于上面)。我意识到还有其他方法可以做到这一点,但我真的希望有一个setprop,它的语法是这样工作的:
point.setprops('x','y','z') = (14, 22, 30)
我不确定,但我觉得可能有一种方法可以做到这一点,因为@塞特人装饰工。但我不知道如何重载equals运算符以这种方式使用它,或者如果可能的话。在
我想我现在就这样写吧 点集属性(“x”、“y”、“z”,14、22、30)
也许我在你的解释中漏掉了什么,但你不能已经这样做了吗?例如
作为第二个问题的语法
point.setprops('x','y','z') = (14, 22, 30)
不幸的是,我不确定这是否可能。原因是
point.setprops('x', 'y', 'z')
是一个“call”表达式。由于python的解析方式,我认为不能在赋值语句的左侧有一个调用表达式。据我所知,你只能有一个变量名或切片/索引表达式的列表。话虽如此,我也不是百分之百肯定。可能有一些疯狂的Python忍者的东西,你可以做的工作。在
一开始,你不需要这个-因为你可以:
但是,假设这还不够清楚,您需要能够同时设置多个字段。然后可以使用^{} :
^{pr2}$然后可以执行以下操作:
然后,您还可以将} 方法,类似地实现并能够做到:
getprops
方法替换为^{相关问题 更多 >
编程相关推荐