Python基础---类Class
类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 class Name(object): 2 def __init__(self, first_name, last_name): 3 self.first_name = first_name 4 self.last_name = last_name
2、有关于函数的一切都适用与方法,唯一的差别是调用方法的方式
3、在类中,还包含其他自己定义的方法,即函数
1 class Name(object): 2 def __init__(self, first_name, last_name): 3 self.first_name = first_name 4 self.last_name = last_name 5 6 def guest_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 class Information(Name): 2 def __init__(self, first_name, last_name, age, height): 3 super().__init__(first_name, last_name)
2、给子类定义新的属性和方法
1 class Information(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 = height 6 7 def guest_age(self): # 子类的方法 8 print('The guest\'s age is ' + str(self.age)) 9 10 def guest_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 class Information(Name): 2 def __init__(self, first_name, last_name): 3 super().__init__(first_name, last_name) 4 5 def guest_name(self): # 在子类中重写了父类的guest_name方法 6 name = self.first_name + '----' + self.last_name 7 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 import PyQt5 2 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 class Animal(): 2 pass 3 4 class Dog(Animal): 5 pass 6 7 class Cat(Animal): 8 pass 9 10 print(issubclass(Dog, Animal)) 11 --->True
2、isinstance()
检测某个对象是否是指定类的对象
语法:isinstance(obj, type)
返回值:bool
1 class Animal(): 2 pass 3 4 class Dog(Animal): 5 pass 6 7 class Cat(Animal): 8 pass 9 10 dog = Dog() 11 print(isinstance(dog, Dog)) 12 --->True 13 print(isinstance(dog, Animal)) 14 --->True
3、hasattr()
检测一个对象或类有无制定成员
语法:hasattr(cls, string)
返回值:bool
1 class Animal(): 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__

浙公网安备 33010602011771号