gpt4 book ai didi

python - 在Python中如何区分这个类中什么是方法,什么是对象构造函数?

转载 作者:行者123 更新时间:2023-11-30 23:08:40 25 4
gpt4 key购买 nike

我是 Python 和 PySide 的初学者。有人可以解释一下如何识别什么是对象构造函数以及什么是此类中的方法(例如 QLCDNumber(self) 与 addWidget(argv)),因此为什么不调用 self.vbox 而不是 vbox?

import sys 
from PySide import QtGui, QtCore

class App(QtGui.QWidget):

def __init__(self):
super(Example, self).__init__()
self.init_ui()

def init_ui(self):
lcd = QtGui.QLCDNumber(self)
sld = QtGui.QSlider(QtCore.Qt.Horizontal, self)

vbox = QtGui.QVBoxLayout()
vbox.addWidget(lcd)
vbox.addWidget(sld)

最佳答案

Python 中“方法”和“对象构造函数”之间的区别非常微小。您一定对 Java 感到彻底困惑了。

考虑一下:

class A():
def __init__(self, bar):
baz = bar + bar
self.egg = baz + baz

def B(tuna):
return A(tuna)

所发生的情况是,baz 只是一个变量,在 A.__init__() 结束后,只有 egg 还在。

>>> A("foo").egg
"foofoofoofoo"
>>> A("foo").baz # exception

此外,A()B() 的返回值是无法区分的。

在 Python 中,比 Java 更重要的是,一切都是对象,并且在一些极端情况下,函数和方法之间没有区别。如果您真的真的确实需要检查,那么可以这样做:

>>> import types
>>> type(A) == types.ClassType and type(B) != types.ClassType
True
>>> type(A) != types.FunctionType and type(B) == types.FunctionType
True
>>> type(A.__init__) == types.MethodType and type(B) != types.MethodType
True

...但是进行这种内省(introspection)的需要非常罕见。

关于python - 在Python中如何区分这个类中什么是方法,什么是对象构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31620712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com