How to avoid using 'self' so much
我正在编写一个程序来模拟一个小型物理系统,当我编写这样的东西时,我变得越来越恼火:
K = 0.5 * self.m * self.v**2
在上面的例子中,这个方程很短,也很容易理解,但是我遇到的情况是,self太多了,以至于整个事情看起来一团糟。我知道python总是要求self引用类成员,但是有没有办法让代码看起来不像self的马赛克?
编辑:我通常会做如下的事情:
var = self.var
继续使用var,而不是self.var。后来我这样做:
self.var = var
但这似乎很愚蠢。解决这个问题的方法是什么?
- 如果方程看起来杂乱无章,您可以将它们分解,并使用单独的方法实现它们。
- 您可以随时将self更改为s,但其他阅读您的代码的人可能会讨厌您。
- 如果你遇到一堆乱七八糟的self的情况,如果你习惯用var替换self.var(如果是,你确定需要一个类的实例吗?)我怀疑这是因为你的编码方式被一些扭曲的算法思想所扭曲。你必须给我们一些这样的情况的例子,让我们来检查你是否有理由认为你的算法是好的,自我丰富是错误的,而不是相反的。
- Python的方式是接受自我的…
- 事实上:你用的是Python式的方式。self.var告诉每个人它来自哪里,如果你修改它,它会去哪里。我们可以使用globals()和locals()来使用名称空间技巧,但是尽管python使它们成为可能,但在良好的实践意义上,它们不是很"Python"…
如果您只想保存一些按键,则可以将self重命名为s:
1 2 3
| class MyClass(object):
def kinetic_energy(s): # use s instead of self for brevity
return 0.5 * s.m * s.v**2 |
这样每次使用self都可以节省3个字符。这违反了标准惯例,但没有什么能阻止你这样做。我建议不要在普通代码中这样做,但如果它能使一些非常长的公式更易于阅读,则可能是合理的。一定要在评论中提到这个不寻常的选择,以防其他人在你很久不在的时候不得不阅读你的代码。
对于混乱的部分,我将使用python模块和"模块级变量"而不是类。
我想可以在python中使用一些黑色魔法,然后开发一个上下文管理器,它将获取一个对象并将其所有属性放在上下文的locals()中,然后将其分配回__exit__函数中的对象。
找到此https://code.google.com/p/ouspg/wiki/anonymousblocksinpython,可能会有所帮助。