一、面向对象的简介
- Python是一门面向对象的编程语言。
- 所谓面向对象的语言,简单的理解就是语言中的所有操作都是通过的对象来进行的。
- 面向过程:
- 面向过程将我们的程序分解为一个一个步骤,通过对每个步骤的抽象来完成程序
- 这种编写方式往往至适用于一个功能,如果要实现别的功能,往往复用性比较低。
- 这种编程方式符合人类的思维,编写起来比较容易。
- 1.妈妈穿衣服穿鞋出门
- 2.妈妈骑上电动车
- 3.妈妈到超市门口放好电动车
- 4.妈妈买西瓜
- 5.妈妈结账
- 6.妈妈骑电动车回家
- 7.到家孩子吃西瓜
- 面向对象的编程语言,关注的是对象,而不注重过程,对于面向对象一切皆是对象。
- 以上方式可以用 孩子妈妈给孩子买瓜来解决。
- 面向对象的编程思想,将所有功能同意保存到一个对应的对象中,要使用某个功能,直接找到对应的对象即可。
- 这种编码方式比较容易阅读,和并且易于维护,容易服用。但是编写的过程中不太符合常规的思维,编写起来相对麻烦。
二、类的简介
- 我们目前学习的都是Python的内置对象,但是内置对象并不能满足我们的需求,所以我们在开发中经常要自定义一些对象。
- 类:简单理解它就是相当于一张图纸,在程序汇总我们需要根据类来创建对象。
*类就是对象的图纸(框架)。 - 我们也称呼对象是类的实例(instance判断)。
- 如果对各对象是通过一个类来创建的,我们称这些对象是一类对象。
- 类也是对象,类就是用来创建对象的对象。
- 可以向对象只能给添加变量,对象中的变量称之为属性。
- 语法:
# 语法:
class MyClass():
pass
注:大驼峰的命名规则。
- 可以向对象中添加变量,对象中的变量称为属性。
对象的创建
语法:
mc = MyClass()
演示示例:
# 创建一个类:
class MyClass():
pass
# 创建一个对象(实例):
mc = MyClass()
mc1 = MyClass()
mc2 = MyClass()
mc3 = MyClass()
# isinstance--检测对象是否是类的实例(对象)
r = isinstance(mc1,type(mc1))
print(r)
# 查看对象的数据类型
print(mc, type(mc))
打印输出结果:
E:\python\python.exe D:/PycharmProjects/基础班第11期/day-12/上课代码/类的简介.py
False
<__main__.MyClass object at 0x00000251862B6FD0> <class '__main__.MyClass'>
Process finished with exit code 0
三、类的定义
- 类和对象都是对现实生活中事物的抽象。
- 类(事物)包含两部分
- 1 .数据(属性)-- 初始化变量
- 2 .行为(方法)-- 在类的内部定义函数
- 类(事物)包含两部分
- 方法调用: 对象.函数名()(针对方法(函数)的调用)
- 方法调用与函数调用的区别:
- 如果是函数调用,调用几个形参,就会传递几个实参。
- 如果是方法调用,默认传递一个参数,所以方法中至少有一个形参。
- 在类代码块中,我们可以定义变量和函数
- 变量会成为给类实例(对象)的公共属性,所有的该类实例(对象)都可以通过 --对象.属性名的形式访问。
- 函数会成为该类实例(对象)的公共方法,所有的该类实例(对象)都可以通过 --对象.方法名的形式访问。
演示示例:
class MyClass():
pass
# 检验
# print(id(MyClass),type(MyClass))
# 在类内部添加属性
MyClass.name = '奥特曼'
# 创建实例(对象)(并调用)
mc = MyClass()
# 在(实例)对象内部添加属性
mc.name = '葫芦娃'
# 创建实例(对象)
mc1 = MyClass()
print(mc.name)
print(mc1.name)
打印输出结果:
葫芦娃
奥特曼
总结:当实例(对象)中有属性值,那么实例第一会调用实例本身的属性,没有才会调用类中的属性值。
class Person():
# 在类内部创建属性(类似于初始化(公共)属性)(就是定义在类中的数据)
name = '奥特曼'
# 在类内部定义一个方法(speak是方法名)(定义在类中的函数)
def speak(self):
print('我想回家')
# 创建对象(实例)
a = Person()
b = Person()
# a 添加属性值(name是属性名)
a.name = '葫芦娃'
print(a.name)
print(b.name)
print(a.speak())
print(b.speak())
打印输出结果:
/Users/wangjiaxin/venv/bin/python /Users/wangjiaxin/PycharmProjects/wangjiaxin/Python-Cheney老师基础讲解/第十一讲/3--类的使用.py
葫芦娃
奥特曼
我想回家
None
我想回家
None
总结:类和对象都是现实生活中的抽象,实际上都是有两部分构成。
1.属性 (数据)
2.方法 (行为)
调用函数的时候,有几个形参就要只有几个实参。
方法调用的时候,默认要指定一个形参,所以方法中至少有一个形参。
总结:在类的代码块中,我们可以定义变量和函数。
1.变量会成为该类实例(对象)的公共属性,所有的该类实例(对象)都可以通过 对象.属性名()的形式访问。
2.函数会成为该类实例(对象)的公共方法,所有该类实例(对象)都可以通过 对象.方法名()的形式访问。
四、self参数
- 属性和方法:
- 类中定义的属性和方法都是公共的,任何该类实例都可以fan访问。
- 属性和方法的查找流程
*当我们调用一个对象的属性时,解析器会在当前的对象中寻找是否还有该属性。 如果有,则直接返回当前的对象的属性值。 如果没有,则去当前对象的类(对象)中去寻找,如果有,则返回类(对象)的属性值。如果没有就报错。 - 类(对象)和实例(对象)中都可以保存属性和方法
- 如果这个属性或者方法是可以实例共享的,则应该保存至类对象中。
- 如果这个属性或者方法是某个实例独有的。则应该保存到实例对象中。
- 一般情况下,属性保存到实例对象中,而方法需要保存到类对象中。
演示示例:
class Person:
# self 就是实例对象
def speak(self):
print('大家好,我是%s' % self.name)
# print(s)
# def run(self):
p1 = Person()
p1.name = '周慧敏'
p2 = Person()
p2.name = '刘亦菲'
p1.speak()
# print(p1)
p2.speak()
# print(p2)
打印输出结果:
E:\python\python.exe D:/PycharmProjects/基础班第11期/day-12/上课代码/self参数.py
大家好,我是周慧敏
大家好,我是刘亦菲
Process finished with exit code 0
- self参数如果在方法中使用,必须携带self参数。
- self参数就是指的是调用该方法的实例的本身,也就是实例对象。
五、特殊方法
- 在类中可以定义一些特殊特殊方法
- 完成特殊方法需要保证的三点
- 1.在类中,属性对我们的程序是必须的
- 2.但是,属性又都是不同的
- 3.在设置好属性名之后手动添加属性又容易忘记
- 完成特殊方法需要保证的三点
- 特殊方法的语法形式
__xxx__()
这种方法我们称之为特殊方法,又称为魔法方法。
特殊方法的演示:
1、不使用特殊方法的类
class Person():
# 在类的内部创建一个方法
def sperk(self):
print('大家好,我是%s' % self.name)
# 创建实例(对象)
p1 = Person()
# 添加属性
p1.name = '刘德华'
p2 = Person()
p2.name = '渣渣灰'
p1.speak()
p2.speak()
打印输出结果:
你好我是刘德华
你好我是张家辉
2、使用特殊方法的类
class Person:
# 类属性:
# name = '向华强'
def __init__(self,name): # 新建init方法 # self就是实例(对象),通过类似函数穿参的模式,将name传入实参
self.name = name
# print('类中的print') # 通过总结2可知,本行代码如果运行,将是最先运行的代码。
def speak(self): # 新建speak方法
print('大家好,我是%s' % self.name)
p1 = Person('刘德华') # 本行代码中的刘德华,就像函数穿参的中的实参。通过函数函数穿参的模式,传递给33行代码中的name,函数再继续向下执行,通过38行代码进行拼接,打印输出。
# 调用init方法
# p1.__init__() # 通过总结1可知本行代码属于二次调用,非需要时,不写。
p2 = Person('郭富城')
p3 = Person('何润东')
p1.speak()
p2.speak()
p3.speak()
打印输出结果:
大家好,我是刘德华
大家好,我是郭富城
大家好,我是何润东
总结:
- 1.每创建一个实例对象,解释器python就会调用一次init魔法方法。
- 2.在面向对象的函数中,类是最大的,执行顺序也是优先执行的。