5.2 类与对象

类与对象的概念

类即类别、种类,是面向对象设计最重要的概念,从一小节我们得知对象是特征与技能的结合体,而类则是一系列对象相似的特征与技能的结合体。

那么问题来了,先有的一个个具体存在的对象(比如一个具体存在的人),还是先有的人类这个概念,这个问题需要分两种情况去看

  • 在现实世界中:肯定是先有对象,再有类
世界上肯定是先出现各种各样的实际存在的物体,然后随着人类文明的发展,人类站在不同的角度总结出了不同的种类,比如
人类、动物类、植物类等概念。也就说,对象是具体的存在,而类仅仅只是一个概念,并不真实存在,比如你无法告诉我人类
具体指的是哪一个人。
  • 在程序中:务必保证先定义类,后产生对象
这与函数的使用是类似的:先定义函数,后调用函数,类也是一样的:在程序中需要先定义类,后调用类。不一样的是:调用
函数会执行函数体代码返回的是函数体执行的结果,而调用类会产生对象,返回的是对象

定义类

按照上述步骤,我们来定义一个类(我们站在老男孩学校的角度去看,在座的各位都是学生)

  • 在现实世界中,先有对象,再有类
对象1:张三
    特征:
        学校=cpu
        姓名=leco
        性别=男 年龄=18 技能: 学习 吃饭 睡觉 对象2:李四 特征: 学校=cpu 姓名=张三 性别=女 年龄=38 技能: 学习 吃饭 睡觉 对象3:璐璐 特征: 学校=cpu 姓名=李四 性别=男 年龄=78 技能: 学习 吃饭 睡觉 现实中的学生类 相似的特征: 学校=cpu 相似的技能: 学习 吃饭 睡觉 
  • 在程序中,务必保证:先定义(类),后使用类(用来产生对象)
#在Python中程序中的类用class关键字定义,而在程序中特征用变量标识,技能用函数标识,因而类中最常见的无非是:变量和函数的定义
class CpuStudent:
    school='cpu' def learn(self): print('is learning') def eat(self): print('is eating') def sleep(self): print('is sleeping') 

注意:

  • 类中可以有任意python代码,这些代码在类定义阶段便会执行,因而会产生新的名称空间,用来存放类的变量名与函数名,可以通过CpuStudent.__dict__查看
  • 类中定义的名字,都是类的属性,点是访问属性的语法。
  • 对于经典类来说我们可以通过该字典操作类名称空间的名字,但新式类有限制(新式类与经典类的区别我们将在后续章节介绍)

类的使用

  • 引用类的属性
CpuStudent
.school #查 Cpu.school='cc' #改 CpuStudent.x=1 #增 del CpuStudent.x #删 
  • 调用类,或称为实例化,得到程序中的对象
s1=CpuStudent()
s2=CpuStudent() s3=CpuStudent() #如此,s1、s2、s3都一样了,而这三者除了相似的属性之外还各种不同的属性,这就用到了__init__ 
  • __init__方法
#注意:该方法是在对象产生之后才会执行,只用来为对象进行初始化操作,可以有任意代码,但一定不能有返回值
class CpuStudent:
    ...... def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex ...... s1=CpuStudent('张洒','男',18) #先调用类产生空对象s1,然后调用CpuStudent.__init__(s1,'李坦克','男',18) s2=CpuStudent('李四','女',38) s3=CpuStudent('璐璐','男',78) 

对象的使用

#执行__init__,s1.name='牛榴弹',很明显也会产生对象的名称空间可以用s2.__dict__查看,查看结果为
{'name': '李四', 'age': '女', 'sex': 38} s2.name #查,等同于s2.__dict__['name'] s2.name='李四' #改,等同于s2.__dict__['name']='李四' s2.course='python' #增,等同于s2.__dict__['course']='python' del s2.course #删,等同于s2.__dict__.pop('course') 

补充说明

  • 站的角度不同,定义出的类是截然不同的;
  • 现实中的类并不完全等于程序中的类,比如现实中的公司类,在程序中有时需要拆分成部门类,业务类等;
  • 有时为了编程需求,程序中也可能会定义现实中不存在的类,比如策略类,现实中并不存在,但是在程序中却是一个很常见的类。

转载于:https://www.cnblogs.com/caimengzhi/p/8435176.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值