这个问题在这里已经有了答案:Howtoavoidinfiniterecursionwithsuper()?(1个回答)关闭7年前。我最近发现(通过StackOverflow)调用基类中的方法我应该调用:super([[派生类]],self).[[基类方法]]()没关系,它有效。但是,当我进行更改时,我发现自己经常在类之间复制和粘贴,并且经常忘记将派生类参数修复为super()函数。我想避免必须记住更改派生类参数。我可以改用self.__class__作为super()函数的第一个参数吗?这似乎行得通,但我有充分的理由不应该这样做吗? 最佳答案
Python是我最了解的语言,但奇怪的是我仍然不知道为什么我输入的是“self”而不是Java或PHP中的“this”。我知道Python比Java更老,但我不知道这是从哪里来的。特别是因为您可以使用任何名称而不是“self”:该程序可以正常工作。那么这个约定从何而来? 最佳答案 Xerox于1980年发布的Smalltalk-80使用了self。Objective-C(1980年代初期)在C上叠加Smalltalk功能,因此它也使用self。Modula-3(1988年)、Python(1980年代后期)和Ruby(1990年代中
Python是我最了解的语言,但奇怪的是我仍然不知道为什么我输入的是“self”而不是Java或PHP中的“this”。我知道Python比Java更老,但我不知道这是从哪里来的。特别是因为您可以使用任何名称而不是“self”:该程序可以正常工作。那么这个约定从何而来? 最佳答案 Xerox于1980年发布的Smalltalk-80使用了self。Objective-C(1980年代初期)在C上叠加Smalltalk功能,因此它也使用self。Modula-3(1988年)、Python(1980年代后期)和Ruby(1990年代中
在unittest的setUp()方法中,我设置了一些self变量,稍后在实际测试中会引用这些变量。我还创建了一个装饰器来做一些日志记录。有没有一种方法可以让我从装饰器中访问那些self变量?为简单起见,我发布此代码:defdecorator(func):def_decorator(*args,**kwargs):#accessafromTestSamplefunc(*args,**kwargs)return_decoratorclassTestSample(unittest.TestCase):defsetUp(self):self.a=10deftearDown(self):#te
在unittest的setUp()方法中,我设置了一些self变量,稍后在实际测试中会引用这些变量。我还创建了一个装饰器来做一些日志记录。有没有一种方法可以让我从装饰器中访问那些self变量?为简单起见,我发布此代码:defdecorator(func):def_decorator(*args,**kwargs):#accessafromTestSamplefunc(*args,**kwargs)return_decoratorclassTestSample(unittest.TestCase):defsetUp(self):self.a=10deftearDown(self):#te
这两个类有何不同?classA():x=3classB():def__init__(self):self.x=3有什么明显的区别吗? 最佳答案 A.x是一个类变量。B的self.x是一个实例变量。即A的x在实例之间共享。使用可以修改的东西(如列表)更容易展示差异:#!/usr/bin/envpythonclassA:x=[]defadd(self):self.x.append(1)classB:def__init__(self):self.x=[]defadd(self):self.x.append(1)x=A()y=A()x.ad
这两个类有何不同?classA():x=3classB():def__init__(self):self.x=3有什么明显的区别吗? 最佳答案 A.x是一个类变量。B的self.x是一个实例变量。即A的x在实例之间共享。使用可以修改的东西(如列表)更容易展示差异:#!/usr/bin/envpythonclassA:x=[]defadd(self):self.x.append(1)classB:def__init__(self):self.x=[]defadd(self):self.x.append(1)x=A()y=A()x.ad
我已经编写了一个自定义容器对象。根据thispage,我需要在我的对象上实现这个方法:__iter__(self)但是,在跟进指向IteratorTypes的链接后在Python引用手册中,没有给出如何实现自己的示例。有人可以发布一个片段(或资源链接),说明如何做到这一点?我正在编写的容器是一个映射(即通过唯一键存储值)。dicts可以像这样迭代:fork,vinmydict.items()在这种情况下,我需要能够在迭代器中返回两个元素(一个元组?)。仍然不清楚如何实现这样的迭代器(尽管已经提供了几个答案)。有人可以详细说明如何为类似map的容器对象实现迭代器吗?(即像字典一样的自定义
我已经编写了一个自定义容器对象。根据thispage,我需要在我的对象上实现这个方法:__iter__(self)但是,在跟进指向IteratorTypes的链接后在Python引用手册中,没有给出如何实现自己的示例。有人可以发布一个片段(或资源链接),说明如何做到这一点?我正在编写的容器是一个映射(即通过唯一键存储值)。dicts可以像这样迭代:fork,vinmydict.items()在这种情况下,我需要能够在迭代器中返回两个元素(一个元组?)。仍然不清楚如何实现这样的迭代器(尽管已经提供了几个答案)。有人可以详细说明如何为类似map的容器对象实现迭代器吗?(即像字典一样的自定义
我一直在通过关注pygametutorials学习Python.其中我发现了关键字self的广泛使用,并且我主要来自Java背景,我发现我总是忘记输入self。例如,我会输入rect.centerx而不是self.rect.centerx,因为对我来说,rect已经是类(class)。对于这种情况,我能想到的Java并行方法是必须在所有对成员变量的引用前加上this。我是不是一直在为所有成员变量加上self前缀,还是有办法声明它们可以让我避免这样做?即使我的建议不是pythonic,我仍然想知道它是否可能。我已经查看了这些相关的SO问题,但它们并没有完全回答我所追求的:Python-w