首页 > 解决方案 > 如果您已经继承了一个类,是否有必要导入它?

问题描述

在下面的代码中,这家伙导入了 Qwidget 类,并且继承了 Sample Window 类中的 Qwidget 类,但是通过继承我们可以使用 Qwidget 类的所有功能。那么,他为什么要导入 Qwidget 类?我是这个主题的新手。对不起,如果这是一个愚蠢的问题。

# Import required modules
import sys, time
from PySide.QtGui import QApplication, QWidget, QIcon    

class SampleWindow(QWidget):
# Constructor function
def __init__(self):
super(SampleWindow, self).__init__()
self.initGUI()
def initGUI(self):
self.setWindowTitle("Icon Sample")
self.setGeometry(300, 300, 200, 150)
# Function to set Icon
appIcon = QIcon('pyside_logo.png')
self.setWindowIcon(appIcon)
self.show()
if __name__ == '__main__':
# Exception Handling
try:
myApp = QApplication(sys.argv)
myWindow = SampleWindow()
myApp.exec_()
sys.exit(0)
except NameError:
print("Name Error:", sys.exc_info()[1])
except SystemExit:
print("Closing Window...")
except Exception:
print(sys.exc_info()[1])

标签: python-3.xpyside

解决方案


父类(parent.py)

class A:
    var_a = 10

子类(child.py)

class B(A):
var_b = 5


b = B()
print(b.var_b)
print(b.var_a)

未导入 A 时:

output:
Traceback (most recent call last):
   File "child.py", line 1, in <module>
     class B(A):
 NameError: name 'A' is not defined

进口A:

from parent import A


class B(A):
    var_b = 5


    b = B()
    print(b.var_b)
    print(b.var_a)

    #output:
    5
    10

在第二种情况下,我们能够访问类 A(它是继承的)只是因为我们从 parent.py 文件中导入了父类 A。第一种情况给了我们未定义的错误,因为类 A 不在名称空间中。

同样,如果类 A 和 B 都存在于同一个文件中,我们将能够访问从 B 继承的变量而不会出现未定义的错误,因为 A 已经在命名空间中。


推荐阅读