主要内容:
- 小目标:掌握面向对象
- 主要内容:面向对象基本概念,类定义,属性
如果看完这篇文章,你还是弄不面向对象与类基本语法,
你来找我,我保证不打你,我给你发100的大红包。
面向对象的好处,后面通过案例来体会
1 基本概念:
- 面向对象: 相对于面向过程,面向对象把相关的数据和方法组织为一个整体来看待;
- 把整个需求按照特点、功能划分,将这些存在共性的部分封装成类,创建对象。
- 面向对象相关知识点:抽象,封装,继承,多态;
- 类:具有相同属性与行为的对象的集合体,是一个抽象的概念;
- 对象:类的一个实例,具体的存在对象;
一个例子:
人是一个抽象的概念,一个类,它是所有人的一个抽象概念,
小明是一个人的对象,有具体属性(姓名,性别等)与行为(吃饭,睡觉等)
2. python类的定义
类主要有两部分组成:
- 数据:对应类中属性
- 行为:对应类中方法
2.1 类的定义
基本语法:
class 类名:
pass
说明
class :关键字
类名:类的名称
2.2 定义一个类,并创建对象
class Test:
pass
#创建对象
obj = Test()
print(type(obj))
结果:class 'main.Test'
obj=Test()的这个过程我们成为实例化,创建Test的具体对象。
对象可以访问类中方法与属性。
2.3 属性
两个基本概念:
名空间与作用域:类与对象会引入命名空间与作用域;
对象属性与方法查找顺序:对象>类>全局>build-in;
属性访问:类名.属性,或者:对象.属性;
一个例子:
class Test:
level = 1
obj = Test()
print('class Test.level=', Test.level)
print('object obj.level=', obj.level)
定义一个Test类,并增加一个level属性;
实例化一个Test()对象;
通过类与实例去访问属性level;
结果:
class Test.level= 1
object obj.level= 1
分析:
leve是类Test中的属性,所以:level=1;
obj是Test对象,其level的属性来自于类Test的level;
2.4 类属性与实例属性之间关系
两个实验, 实验1:修改Test类中的level值,观察obj的level值;
Test.level = 2
print('class Test.level=', Test.level)
print('object obj.level=', obj.level)
结果:
class Test.level= 2
object obj.level= 2
分析:
Test类中的level发生变化,obj对象中的level也随之变化;
说明:当前场景下,obj访问的level是Test类中的level属性;
实验2:修改obj对象中的level值,观察Test类中的level值;
Test.level = 2
obj.level = 3
print('class Test.level=', Test.level)
print('object obj.level=', obj.level)
结果:
class Test.level= 2
object obj.level= 3
分析:
Test类中的level=2,同时obj对象增加level=3;
再次访问Test类与obj对象中的level,两个值不同;
对象中的属性查找优先级:对象命名空间>类命名空间;
obj对象的level属性值为3, Test类中的属性值为2;
再来看一个例子:
print(obj.t)
结果:异常;
AttributeError: 'Test' object has no attribute 't'
类与对象中没有t这个属性,所以错误。
总结
面向对象是一个比较重要点,这节我们强调基本概念:
什么是类,对象;
类与对象之间关系及命名空间与作用域;
python中创建类与对象方式;