类Class
类是抽象的模板,实例是根据类创建的一个个具体的对象,每个对象都拥有相同的方法,但是可能数据不同
定义:在Python中,使用class关键字定义类,class后面紧接着是类名
类名一般都是以大写字母开头的单词,类名后面紧跟(object),object代表该类所继承的类,如果没有明确继承的类,一般默认继承object类
1 class Name(object):
创建一个类:
1、类中的函数称为方法,一个class类中,必定含有一个__init__()这个特殊的方法,init两边分别是两个下划线
每当使用该类创建实例的时候,都会自动运行init方法
__init__(self, 形参1, 形参2...)方法中,形参self必不可少,必须位于所有形参前面,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法
在init方法下定义的两个变量都有前缀self,以self为前缀的变量都可供类中的所有方法使用,也可以通过类的任何实例来访问这些变量
1 className(object):2 def __init__(self, first_name, last_name):3 self.first_name =first_name4 self.last_name = last_name
2、有关于函数的一切都适用与方法,唯一的差别是调用方法的方式
3、在类中,还包含其他自己定义的方法,即函数
1 className(object):2 def __init__(self, first_name, last_name):3 self.first_name =first_name4 self.last_name =last_name5
6 defguest_name(self):7 name = self.first_name + ' ' + self.last_name # self前缀变量可以被guest_name方法直接使用8 print(name)
使用类和实例:
1、使用类进行创建实例
1 guest = Name('alan', 'wood')
2、访问属性:访问实例的属性,可以使用句点表示法
1 guest = Name('alan', 'wood')2 first =guest.first_name # 查看guest实例的first_name变量值3 print(first)
4 --->alan
3、调用方法:在创建实例后,可以使用句点表示法来调用类中定义的任何方法
1 guest = Name('alan', 'wood')2 guest.guest_name()3 --->Alan Wood
继承:
当类A继承另一个类B时,A将获得B所有的属性和方法,所以B是A的父类,A是B的子类
子类在继承父类所有的属性和方法后,还可以定义自己的属性和方法
1、子类的方法__init__():
需要使用super()函数,将父类和子类关联起来(代码片段为Python 3.x版本写法)
1 classInformation(Name):2 def __init__(self, first_name, last_name, age, height):3 super().__init__(first_name, last_name)
2、给子类定义新的属性和方法
1 classInformation(Name):2 def __init__(self, first_name, last_name, age, height):3 super().__init__(first_name, last_name)4 self.age =age # 子类中新的属性5 self.height =height6
7 defguest_age(self): # 子类的方法8 print('The guest\'s age is' +str(self.age))9
10 defguest_height(self):11 print('The guest\'s age is' +self.height)12
13
14 guest = Information('alan', 'wood', 18, '180cm')15 guest.guest_name() # 子类可以直接调用父类中的方法16 guest.guest_age()17 guest.guest_height()
3、父类中的方法只要不符合子类的目标,就可以进行重写,可在子类中定义方法,方法名称要与父类方法同名,在使用子类创建实例时,Python只会关注子类中的被重写方法
1 classInformation(Name):2 def __init__(self, first_name, last_name):3 super().__init__(first_name, last_name)4
5 defguest_name(self): # 在子类中重写了父类的guest_name方法6 name = self.first_name + '----' +self.last_name7 print(name)8
9
10 guest = Information('alan', 'wood')11 guest.guest_name() # 调用guest_name方法,输出结果显示,使用的是重写后的方法12 --->alan----wood
导入类:
1、导入单个类:
1 from PyQt5.QtWidgets import QApplication
2、导入多个类:
在一个模块中可以存储多个类
1 from PyQt5.QtWidgets import QApplication, QAction
3、导入整个模块:
导入模块后,如果要使用相关类,则需要句点表示法
1 importPyQt52
3 x = PyQt5.QtWidgets.QAction()
类编码风格:
1、类名采用驼峰命名法,即类名中的每个单词的首字母都要大写,而不是用下划线
2、在类定义后,需要包含一段注释(''' '''),简要描述类的功能,并遵循函数的注释编写的规则
3、在类中,可使用一个空行分割方法,在模块中,使用两个空行分割类
4、在导入标准库的模块和自定义的模块时,先导入标准库模块,再导入自定义模块,中间使用空行隔开
类的常用函数:
1、issubclass()
检测一个类是否是另一个或一组类中的子类
语法:issubclass(cls1, cls2) cls1是否是cls2的子类
issubclass(cls1, (cls2, cls3)) cls1是否是cls2或者cls3的子类
返回值:bool
1 classAnimal():2 pass3
4 classDog(Animal):5 pass6
7 classCat(Animal):8 pass9
10 print(issubclass(Dog, Animal))11 --->True
2、isinstance()
检测某个对象是否是指定类的对象
语法:isinstance(obj, type)
返回值:bool
1 classAnimal():2 pass3
4 classDog(Animal):5 pass6
7 classCat(Animal):8 pass9
10 dog =Dog()11 print(isinstance(dog, Dog))12 --->True13 print(isinstance(dog, Animal))14 --->True
3、hasattr()
检测一个对象或类有无制定成员
语法:hasattr(cls, string)
返回值:bool
1 classAnimal():2 name = 'x'
3 age = 11
4
5 print(hasattr(Animal, 'name'))6 --->True
4、getattr(obj, attrname) 获取对象或类成员的值,对已存在的值 等价于 obj.attrname
getattr(obj, attrname, default) ----------------------,对不存在成员设置默认值,但是只对当此有效,返回default默认值
setattr(obj, attrname, value) 设置对象或类成员的值,相当于 obj.attrname = value
delattr(obj, attrname) 删除对象或类成员的值,需要保证对象中含有attrname
5、dir()
获取一个对象或类的所有成员
语法:dir(obj)
返回值:list
类的内置属性:
1、__dict__ :
获取类或对象自身的属性
语法:obj.__dict__
返回值:字典
2、__doc__:
获取类或对象的文档,即''' '''中的内容 document
语法:obj.__doc__
3、__name__:
获取类名,对象不可用
语法:cls.__name__
4、__bases__:
获取类的直接继承的所有父类的元组
语法:cls.__bases__
返回值:元组
5、__moudle__:
获取类的模块名称
语法:cls.__moudle__