一、类的定义:
在一个类中,除了可以包含前面所说的属性,还可以包含各种方法。
属性对应一个类可以用来保存哪些数据,而方法对应一个类可以支持哪些操作(即数据处理)。
小提示:
类中的属性对应前面所学习的变量,而类中的方法对应前面所学习的函数。通过类,可以把数据和操作封装在一起,从而使得程序结构更加清晰,这也就是所谓的类的封装性。
类的定义形式:
class 类名:
语句1
语句2
... ...
语句N
提示:类体的各语句需要采用缩进方式以表示它们是类中的语句。
例:创建Student类对象
class Student: #定义一个名字为Student的类 pass #一个空语句,起到占位作用,表示Student类中没有任何属性和方法 if __name__=='__main__': stu=Student() #创建Student类的对象,并将创建的对象赋给变量stu print(stu) #输出stu
输出:<__main__.Student object at 0x000002300639F4E0>
提示:每次创建对象时,系统都会在内存中选择一块区域分配给对象,每次选择的内存通常是不一样的。因此,实际运行时会看到一个不同的stu对象地址。
二、类属性的定义
我们可以直接在定义类时指定该类的属性,即类属性。例如:
class Student: #定义Student类
name='Unknown' #定义Student类中有一个name属性
对类属性的访问,既可以直接通过类名访问,也可以通过该类的对象访问,访问方式为:
类名或对象名.属性名
例:类属性的访问示例
1 class Student: #定义Student类 2 name='Unknown' #定义Student类中有一个name属性 3 if __name__=='__main__': 4 print('第4行输出:',Student.name) 5 stu1=Student() #创建Student类对象stu1 6 stu2=Student() #创建Student类对象stu2 7 print('第7行输出:stu1 %s,stu2 %s'%(stu1.name,stu2.name)) 8 Student.name='未知' #将Student的类属性name赋为“未知” 9 print('第9行输出:',Student.name) 10 print('第10行输出:stu1 %s,stu2 %s'%(stu1.name,stu2.name)) 11 stu1.name='李晓明' #将stu1的name属性赋值为“李晓明” 12 stu2.name='马红' #将stu2的name属性赋值为“马红” 13 print('第13行输出:',Student.name) 14 print('第14行输出:stu1 %s,stu2 %s'%(stu1.name,stu2.name)) 15 Student.name='学生' #将Student的类属性name赋为“学生” 16 print('第16行输出:',Student.name) 17 print('第17行输出:stu1 %s,stu2 %s'%(stu1.name,stu2.name))
第4行输出: Unknown
第7行输出:stu1 Unknown,stu2 Unknown
第9行输出: 未知
第10行输出:stu1 未知,stu2 未知
第13行输出:未知
第14行输出:stu1 李晓明,stu2 马红
第16行输出:学生
第17行输出:stu1 李晓明,stu2 马红
三、为对象动态绑定新属性
Python作为一种动态语言,除了可以在定义类时指定类属性外,
还可以动态地为已经创建的对象绑定新的属性。
例:为对象动态绑定新属性示例。
1 class Student: #定义Student类 2 name='Unknown' #定义Student类中有一个name属性 3 if __name__=='__main__': 4 stu1=Student() #定义Student类对象stu1 5 stu2=Student() #定义Student类对象stu2 6 stu1.age=19 #为对象stu1动态绑定新的属性age 7 print('stu1姓名:%s,年龄:%d'%(stu1.name,stu1.age)) #输出姓名和年龄 8 #print('stu2年龄:'%stu2.age) #取消注释则该语句会报错 9 #print('使用类名访问年龄属性:'%Student.age) #取消注释则该语句会报错
披荆斩棘,仗剑天涯