我通过遵循一些pygame教程来学习Python 。
在其中我发现了关键字 self的 广泛使用,并且主要来自Java背景,我发现自己一直忘记键入 self
。例如,代替self.rect.centerx
我输入rect.centerx
,因为对我来说, rect 已经是该类的成员变量。
Java的并行的我能想到的这种情况是有前缀成员变量的所有引用与 此 。
我是否在所有成员变量前面都加上了 self 前缀,还是有一种方法可以声明它们,而不必这样做呢?
即使我的建议不是 pythonic ,我仍然想知道是否有可能。
我看了这些相关的SO问题,但是它们并不能完全回答我的要求:
Python需要指定self。
结果是,即使没有可见的完整类定义,也永远不会对什么是成员和什么不是成员感到困惑。这会导致有用的属性,例如:您不能添加意外遮蔽非成员并从而破坏代码的成员。
一个极端的例子:您可以在不知道类可能具有什么基类的情况下编写类,并且始终知道您是否正在访问成员:
class A(some_function()):
def f(self):
self.member = 42
self.method()
这就是 完整的 代码!(some_function返回用作基础的类型。)
另一个是动态组合类的方法的:
class B(object):
pass
print B()
# <__main__.B object at 0xb7e4082c>
def B_init(self):
self.answer = 42
def B_str(self):
return "<The answer is %s.>" % self.answer
# notice these functions require no knowledge of the actual class
# how hard are they to read and realize that "members" are used?
B.__init__ = B_init
B.__str__ = B_str
print B()
# <The answer is 42.>
记住,这两个例子都是极端的,您不会每天看到它们,我也不建议您经常编写这样的代码,但它们确实显示了明确要求自我的各个方面。
我被困在编写Python Selenium脚本中,似乎无法令人满意地解决我得到的这个StaleElementReistrceException。 我加载了我的页面,然后单击一个按钮,打开一个表单,允许用户向订单中添加新的信用卡。在这一点上,我做了一个WebDriverWait来暂停脚本,直到这个表单上的Save按钮变为可见。此时,重新创建页面对象,因为它已更改,我的目的是填充字段并保存卡片。 问题
问题内容: 我得到一个看起来不错的xmlhttp.responseText(当我发出警报时-它显示正确的文本)-但是当使用’if’时将其与字符串进行比较的语句-返回false。 (我也是编写返回该字符串的服务器端代码的人)-在深入研究字符串之后,我发现该字符串的第一个字符为“不可见字符”。未显示的字符。如果我将其复制到记事本中- 然后删除了第一个字符-直到再次按Delete键,它才会删除。 我为x
问题内容: 我知道python中的循环导入问题已经出现过很多次了,我已经阅读了这些讨论。在这些讨论中反复提出的意见是,循环导入表明设计不良,应重新组织代码以避免循环导入。 有人可以告诉我在这种情况下如何避免循环导入吗?:我有两个类,并且我希望每个类都有一个构造函数(方法),该构造函数接受另一个类的实例并返回该类的实例。 更具体地说,一类是可变的,一类是不变的。哈希,比较等需要不可变的类。可变类也需
我使用Java实现了很多Selenium测试—有时,我的测试会因为StaleElementReferenceException而失败。 你能建议一些使测试更稳定的方法吗?
我正在设计一个名为unlink Node的非静态无效方法,它将节点n作为参数。它应该确保节点与它之前和之后的节点解除链接。它需要改变n后节点的prev和n前节点的下一个。目前,当我运行它时,我得到了错误 第111行n.getPrev(). Next=null; 尽管我已经输入了语句,以确保如果n是尾部,则不访问它的上一个,如果是头部,则不访问它的下一个,以确保没有访问null。 方法如下: 以及设
问题内容: 我正在编写代码,执行以下操作: 有人告诉我这分别称为“ 延迟反模式 ”或“ 构造函数反模式 ”,这段代码有什么不好之处,为什么又将其称为反模式? 问题答案: Esailija创造的递延反模式(现在是显式构造反模式)是一个新的对诺言做出新承诺的普通反模式人,当我第一次使用诺言时,我自己就做出了。上面代码的问题是无法利用承诺链的事实。 承诺可以与之连锁,您可以直接返回承诺。您的代码可以重写