Qt5 Python GUI 编程指南
创建时间:2018-12-10  访问量:5785  7  0

Qt5 Python GUI 编程指南

面向对象编程

Python支持面向对象(OOP)。OOP具有可复用性;也就是说,之前写的代码可以被用于构建更大的应用程序,而不是一切从零开始。OOP中的对象术语指的是类的变量或实例,这个类是一个组合了一些方法或变量模板或蓝图。类中的变量被称为数据成员,而方法叫作成员函数。当创建类的实例或对象时,对象自动获得对数据成员和方法的访问。

创建一个类

class关键字用于创建一个类。下面是创建一个类的语法:

class class_name(base_classes):
    statement(s)

这里的class_name是一个类的标识符用来标识这个类。在class关键字后面是组成类主体的语句。class主体是由那个类中定义的不同方法和变量组成的。

你可单独创建一个类或者是基于其它的类创建一个类。这个被继承的类被称为基类(base class)。语法中class_name后的这个 base_classes参数表示这个类将继承的所有基类。如果不止一个基类,那么每个基类之间就要使用逗号分隔。被继承的类被称为超类或基类,并且继承的类被称为派生类或子类。 这个派生类可以使用基类中的方法或变量,因此可以实现复用:

class Student:
    name = ""
    def __init__(self, name):
        self.name = name
    def printName(self):
        return self.name

在这个示例中,Student是一个具有一个名为name(初始值为空)的属性组成的类。

类内建属性的使用

一个 class 语句会自动分配一些固定的类属性。那些类的属性可以用来获取关于类本身的一些信息。下面是类属性的列表:

  • __name__:class语句中使用的这个属性表示类的名称

  • __bases__:class语句中提到的这个属性表示基类的名称

  • __dict__:这是字典对象表示其它类的属性

  • __module__:这个属性用于表示类所属模块的模块名称

一个类可以拥有任意数量的方法,并且每个方法都可以拥有任意数量的参数。每个方法中的第一个参数是强制必需的,并且通常名为self(尽管你可以为此参数指定任何名称)。这个self参数代表类实例可以调用其方法的本身。类中方法定义的语法如下所示:

class class_name(base_name):
    Syntax:
        variable(s)
    def method 1(self)
    	statement(s)
    [def method n(self):
    	statement(s)]

一个类可以拥有以下面两种类型的成员:

  • 类变量:这些类变量在所有的实例中都是共享的,并且如果在一个实例中改变了这些变量,在其它实例中也是可见的。这些数据成员要定义到类中所有方法的外面。

  • 实例变量:这些变量是定义在方法的内部,仅属于当前对象的实例,被称为实例变量。任何实例的实例变量的改变仅限制在特定的实例中并且不会影响其它实例中的实例变量。

使用实例方法访问类变量

为了访问类变量,类变量必须使用类名称来调用。例如,为了访问Student类中的name类变量,你需要通过以下形式访问它:

Student.name

你可以看到name类变量的前面使用了Student类名前缀。

实例

为了使用任意类的变量和方法,我们需要创建它的对象和实例。类的实例是它自己的变量和方法的一个复制。这意味着一个实例的变量与其它的实例变量没有任何关系。我们可以根据需要创建任意多的实例。为了创建一个类的实例,你需要写上类的名称后面跟上参数(如果有的话)。例如,下面的语句创建了一个名为studentObj 的Student类的实例:

studentObj = Student()

你可以创建任意多的Student类的实例。例如,下面一行创建了另一个Student类的实例:

courseStudent = Student()

现在,这个实例可以访问类中的类属性和方法。

当在类中定义一个方法时,你需要明确指定一个self参数。当调用这个方法时,self参数是不需要传入的,因为Python会自动添加这个参数。

为了定义一个类中的变量,我们从 __init()__ 方法中获得帮助。这个 __init()__ 方法与传统OOP语言中的构造函数类似,是在实例创建后首先执行的方法。它用于类的变量初始化。依赖于类中的__init()__方法的定义,也就是说,可以使用也可以不使用参数,这些参数可以传入也可以不传入__init()__ 方法。

正如前面提到的,每个类方法的第一个名为self的参数都是类的实例。在 __init()__ 方法中,self指新创建的实例:

class Student:
	name = ""
    def __init__(self):
        self.name = "David"
        studentObj = Student()

在前面的示例中,studentObj是Student类创建的一个实例,并且它的类变量被初始化为David字符串。

还可以向 __init()__ 方法中传递参数,示例如下所示:

class Student:
    name =""
    def __init__(self, name):
        self.name = name
        sutdentObj = Stuent("David")

在上面的例子中,创建了studentObj实例并传入了 David 字符串参数。在 __init()__ 方法中定义了将这个字符串赋值给name参数,再用于实例化实例中的类变量name。记住,__init()__ 方法不要返回任何值。

类似于类变量,类中的方法可以通过类的实例访问,在实例名称后面加上一个点(.)再加上方法名称来调用这个方法。假设Studen类中有一个printName() 方法,它可以通过studentObj实例访问这个方法,语句如下所示:

studentObj.printName()