类与对象
对象是特征与技能的结合体
类则是一系列对象相似的 特征与技能的结合体。
现实生活中:
肯定是先有对象,再有类
程序设计中:
务必保证先定义类,后产生对象
定义类
现实生活中现有对象,再产生类,例如一个班级的学生:
对象1:张三
特征:
民族=汉族
姓名=张三
性别=男
年龄=18
技能:
学习
吃饭
睡觉
对象2:李四
特征:
民族=汉族
姓名=李四
性别=男
年龄=19
技能:
学习
吃饭
睡觉
对象3:王二丫
特征:
民族=汉族
姓名=王二丫
性别=女
年龄=20
技能:
学习
吃饭
睡觉
现实中的老男孩学生类
相似的特征:
名族=汉族
相似的技能:
学习
吃饭
睡觉
而在程序中需要先定义类,再去考虑对象独特的特征:
#先定义类
class student:
mingzu='汉族'
def learn(self):
print('is learning')
def eat(self):
print('is eating')
def sleep(self):
print('is sleeping')
#再产生对象
stu1=student()
stu2=student()
stu3=student()
print(stu1)
print(stu2)
print(stu3)
对于类,可以通过.__dict__来查看类的名称空间
print(student.__dict__)
#{'__module__': '__main__',
'mingzu': '汉族',
'learn': <function student.learn at 0x000002AEA8C376A8>,
'eat': <function student.eat at 0x000002AEA8C37730>,
'sleep': <function student.sleep at 0x000002AEA8C377B8>,
'__dict__': <attribute '__dict__' of 'student' objects>,
'__weakref__': <attribute '__weakref__' of 'student' objects>, '__doc__': None}
注意类一旦定义了,程序就直接运行了,而函数是定义好后,只有调用的时候程序才会运行
类的使用
class student:
mingzu='汉族' #数据属性
def learn(self): #函数属性
print('is learning')
def eat(self): #函数属性
print('is eating')
def sleep(self): #函数属性
print('is sleeping')
#类的使用:查,删,改,增
#查
print(student.mingzu)
print(student.learn)
# 汉族
# <function student.learn at 0x0000023EBCCE76A8>
#增
student.nation='china'
print(student.__dict__['nation'])
#china
#删
del student.nation
#改
student.mingzu='苗族'
print(student.__dict__['mingzu'])
#苗族
__init__方法
该方法是在对象产生之后才会执行,只用来为对象进行初始化操作,可以有任意代码,但一定不能有返回值
class student:
mingzu='汉族' #数据属性
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
student1=student('sunwukong',666,'male')
student2=student('王二丫',18,'female')
print(student1.__dict__)
print(student2.__dict__)
#运行结果:
# {'name': 'sunwukong', 'age': 666, 'sex': 'male'}
# {'name': '王二丫', 'age': 18, 'sex': 'female'}
对象的使用
在对类进行实例化后直接调用该对象的属性
print(student1.name)
print(student1.age)
#运行结果:
# sunwukong
# 666
补充:
站的角度不同,定义出的类是截然不同的;
现实中的类并不完全等于程序中的类,比如现实中的公司类,在程序中有时需要拆分成部门类,业务类等;
有时为了编程需求,程序中也可能会定义现实中不存在的类,比如策略类,现实中并不存在,但是在程序中却是一个很常见的类。
类的总结
1.在没有学习类之前,数据和功能是相互分离的,我们在定义变量的时候有的需要定义一大堆的全局变量,通过类我们可以将一些对象公用或者相似的属性,进行总结成类,简化代码的重复。换句话说:将数据与专门操作该数据的功能整合到一起。
2.类使程序的可扩展性变高。在有多个对象的时候,可通过新增一个类的属性将其赋给所有的对象。