python精讲之面向对象(1)
程序员文章站
2022-06-15 10:18:16
文章目录基本概念面向过程类(class)类的创建基本概念数据封装、继承和多态是面向对象的三大特点面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。Python是⼀⻔⾯向对象的编程语⾔所谓⾯向对象的语⾔,简单理解就是语⾔中的所有操作都是通过对象来进⾏ 的对象概念可参考https://blog.csdn.net/xdc1812547560/article/details/107...
基本概念
数据封装、继承和多态是面向对象的三大特点
- 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。
- Python是⼀⻔⾯向对象的编程语⾔
- 所谓⾯向对象的语⾔,简单理解就是语⾔中的所有操作都是通过对象来进⾏ 的
对象概念可参考https://blog.csdn.net/xdc1812547560/article/details/107512610
面向过程
- ⾯向过程指将我们的程序分解为⼀个⼀个步骤,通过对每个步骤的抽象来 完成程序
比如:将大象装进冰箱需要几步:
第一步:打开冰箱
第二步:将大象装进去
第三步:关上冰箱
- 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。
- 而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。
- 在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。
类(class)
- 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。
python中有很多自己的内置对象,比如int(),str(),float()…
a = 10 == a = int(10) == 创建了一个int类的实例
a = 'hello world' == a =str('hello world') == 创建了一个str类的实例
但是仅仅靠内置对象不足以满足我们的需求,所以需要我们自己定义对象
- 对象是类的实例(instance) 如果多个对象是通过⼀个类创建的,我们称这些对象是⼀类对象
- 类也是⼀个对象,类就是⽤来创建对象的对象
类的创建
定义一个类,其实可以算是定义了一个type类型的对象,也就是说,创建了一个对象,而对象的类型type是class(类)
语法:
class 类名(父类):
#类的属性
name = '程序猿'
#类的方法
def joke(self):
print('创建类成功')
class Myclass():
pass
print(Myclass,type(Myclass))
<class '__main__.Myclass'> <class 'type'>
类的实例化
class Myclass(object):
pass
- class后面紧接着是类名,即Myclass,类名通常是大写开头的单词
- 紧接着是(object),表示该类是从哪个类继承下来的,
- 继承的概念我们在后续更新的博客再讲,通常,如果没有合适的继承类,就使用object类,这是所有类最终都会继承的类。
定义好了Myclass类,就可以根据Myclass类创建出Myclass的实例,创建实例是通过类名+()实现的
class Myclass():
pass
mc = Myclass()
mc.name = '秃头程序猿'
print(mc,type(mc))
print(mc.name)
<__main__.myclass object at 0x7f4afb5248b0> <class '__main__.myclass'>
秃头程序猿
isinstance
isinstace用来检查一个对象是否是一个类的实例,返回值是布尔类型
class Myclass():
#类的属性
name = '程序员'
#类的方法
def world(a):
print('调用方法成功')
mc = Myclass()
mc2 = Myclass()
mc3 = Myclass()
print(isinstance(mc,Myclass))
print(isinstance(mc,int))
True
False
类的调用方法
- 调⽤⽅法 对象.⽅法名()
- ⽅便调⽤和函数调⽤的区别:如果是函数调⽤,调⽤时有⼏个形参,就会传 递⼏个实参。如果是⽅法调⽤,默认传递⼀个参数,所以⽅法中⾄少得有⼀ 个形参
像以下实例,类中的方法中没有设立形参。将类实例化之后调用方法则会报错
class Myclass():
#类的属性
name = '程序员'
#类的方法
def world():
print('调用方法成功')
mc = Myclass()
mc.world()
TypeError: world() takes 0 positional arguments but 1 was given
而在类的方法中随便设立一个形参之后,则调用成功
class Myclass():
name = '程序猿'
def world(a):
print('调用方法成功')
mc = Myclass()
mc.world()
调用方法成功
- 在类代码块中,我们可以定义变量和函数
- 变量会成为该类实例的公共属性,所有的该实例都可以通过 对象.属性名 的形式访问
- 函数会成为该类实例的公共⽅法,所有该类实例都可以通过 对象.⽅法名 的形式访问
class Myclass():
#类的属性
name = '程序员'
#类的方法
def world(a):
print('调用方法成功')
mc = Myclass()
mc2 = Myclass()
mc3 = Myclass()
mc.world()
mc2.world()
mc3.world()
调用方法成功
调用方法成功
调用方法成功
类的属性
- 属性和⽅法的查找流程 当我们调⽤⼀个对象的属性时,解析器会现在当前的对象中寻找是否还有 该属性
- 如果有,则直接返回当前的对象的属性值。
- 如果没有,则去当前 对象的类对象中去寻找,如果有则返回类对象的属性值。如果没有就报错
class Myclass():
#类的属性
name = '程序员'
#类的方法
def world(a):
print('调用方法成功')
mc = Myclass()
mc2 = Myclass()
mc3 = Myclass()
mc.name = '搬砖工'
print(mc.name) #直接返回当前对象返回值
print(mc2.name) #当前对象中的类对象中找
print(mc3.name) #当前对象中的类对象中找
搬砖工
程序员
程序员
没有则报错
class Myclass():
#类的方法
def world(a):
print('调用方法成功')
mc = Myclass()
print(mc.name)
AttributeError: 'Myclass' object has no attribute 'name'
- 如果这个属性(⽅法)是所以的实例共享的,则应该将其保存到类对象中
- 如果这个属性(⽅法)是某个实例独有的。则应该保存到实例对象中
- ⼀般情况下,属性保存到实例对象中 ⽽⽅法需要保存到类对象中
self参数
self参数
- 在定义实例方法时,第一个参数必须是self参数,实例在调用方法时,不需要传递参数
- 在实例方法中需要调用类属性或其他实例方法时,必须采用self.属性名和self.方法名这两种方式
self在英文中,是’自己’的意思,在python中,self是’实例本身’的意思
- self在定义时需要定义,但是在调⽤时会⾃动传⼊。
- self的名字并不是规定死的,但是最好还是按照约定是⽤self
- self总是指调⽤时的类的实例
class Myclass():
name='程序猿'
def print_name(self):
print('我的职业是'+self.name)
mc1 = Myclass()
mc2 = Myclass()
mc1.name = '搬砖工'
mc1.print_name()
mc2.print_name()
我的职业是搬砖工
我的职业是程序猿
本文地址:https://blog.csdn.net/xdc1812547560/article/details/107625714