我正在运行Python 2.5,因此这个问题可能不适用于Python 3.当您使用多重inheritance创build钻石类层次结构并创build派生类的对象时,Python将执行Right Thing(TM)。 它调用派生类的构造函数,然后从左到右列出父类,然后是祖父类。 我熟悉Python的MRO ; 那不是我的问题。 我很好奇从超级对象返回的对象实际上是如何pipe理的,以正确的顺序在父类中调用超级调用。 考虑这个例子代码: #!/usr/bin/python class A(object): def __init__(self): print "A init" class B(A): def __init__(self): print "B init" super(B, self).__init__() class C(A): def __init__(self): print "C init" super(C, self).__init__() class D(B, C): def __init__(self): print "D init" super(D, self).__init__() x = D() 代码做直观的事情,它打印: D init B init C […]
我已经回答了一个有关Python中绝对导入的问题,我认为我是通过阅读Python 2.5更新日志和附带的PEP来理解的。 然而,在安装Python 2.5并尝试制作一个正确使用from __future__ import absolute_import的例子,我意识到事情并不那么清楚。 直接从上面链接的changelog,这个陈述准确地总结了我对绝对导入变化的理解: 假设你有这样的软件包目录: pkg/ pkg/__init__.py pkg/main.py pkg/string.py 这定义了一个名为pkg的包,其中包含pkg.main和pkg.string子模块。 考虑main.py模块中的代码。 如果执行语句import string会发生什么? 在Python 2.4及更早的版本中,它将首先在包的目录中查找执行相对导入,findpkg / string.py,将该文件的内容作为pkg.string模块pkg.string ,并将该模块绑定到名称"string"在pkg.main模块的名字空间中。 所以我创build了这个确切的目录结构: $ ls -R .: pkg/ ./pkg: __init__.py main.py string.py __init__.py和string.py是空的。 main.py包含以下代码: import string print string.ascii_uppercase 正如所料,用Python 2.5运行这个失败与一个AttributeError : $ python2.5 pkg/main.py Traceback (most recent call last): File "pkg/main.py", line 2, in <module> […]
我今天开始编程,并与Python有这个问题。 这是非常愚蠢的,但我不知道如何做到这一点。 当我使用打印命令,它打印任何我想要的,然后去不同的行。 例如: print "this should be"; print "on the same line" 应该返回: 这应该是在同一行 而是返回: 这应该是 在同一条线上 更确切地说,我试图创build一个程序, if它告诉我一个数字是否是2 def test2(x): if x == 2: print "Yeah bro, that's tottaly a two" else: print "Nope, that is not a two. That is a (x)" 但它不能识别最后一个(x)作为input的值,而是恰好打印出“(x)”(带括号的字母)。 为了使它工作,我必须写: print "Nope, that is not a two. That […]
我正在使用Python 2.5。 而使用Python的标准类,我想确定一个文件的图像大小。 我听说过PIL(Python图像库),但它需要安装才能正常工作。 如何在不使用任何外部库的情况下获取图像大小,仅使用Python 2.5自带的模块? 注意我想支持常见的图像格式,特别是JPG和PNG。
在Python 2.5中,是否有办法创build一个装饰器来装饰一个类? 具体来说,我想使用装饰器将成员添加到类,并更改构造函数为该成员的值。 寻找像下面这样的东西(在'class Foo:'上有一个语法错误: def getId(self): return self.__id class addID(original_class): def __init__(self, id, *args, **kws): self.__id = id self.getId = getId original_class.__init__(self, *args, **kws) @addID class Foo: def __init__(self, value1): self.value1 = value1 if __name__ == '__main__': foo1 = Foo(5,1) print foo1.value1, foo1.getId() foo2 = Foo(15,2) print foo2.value1, foo2.getId() 谢谢,罗布 编辑:重读这个问题,我想我真的是一种像Python中的C#接口一样的方法。 我需要改变我的想法。
如何在Python中生成一个列表的所有排列,与列表中元素的types无关? 例如: permutations([]) [] permutations([1]) [1] permutations([1, 2]) [1, 2] [2, 1] permutations([1, 2, 3]) [1, 2, 3] [1, 3, 2] [2, 1, 3] [2, 3, 1] [3, 1, 2] [3, 2, 1] 编辑:Eliben指出类似于我的解决scheme,虽然更简单,所以我select它作为接受的答案,虽然Python 2.6 +具有itertools模块中的内置解决scheme: import itertools itertools.permutations([1, 2, 3])
如果Python没有三元条件运算符,是否可以使用其他语言结构来模拟呢?