01 - 面向对象 - 面向对象举例
所谓面向对象的编程语言,简单理解就是语言中所有的操作都是 通过对象来完成的
面向过程就是将程序的逻辑分解成一个一个的步骤
通过对每个步骤的抽象来完成程序
‘’’
孩子吃西瓜
1.妈妈穿衣服穿鞋出门
2.妈妈骑电动车
3.妈妈到超市门口放好电动车
4.妈妈买西瓜
5.妈妈结账
6.妈妈骑电动车回家
7.到家孩子吃西瓜
‘’’
这种方式编写的代码往往只适用于一个功能
妈妈给孩子买西瓜
面向对象的编程思维,将所有的功能统一保存到对象当中
比如妈妈的功能就保存到妈妈的这个对象当中,孩子的功能就保存到孩子的对象当中
你要使用某个功能,直接找到对应的对应的对象即可
这种方式编写的代码,比较容易阅读,并且比较维护,容易复用
02 - 面向对象 - 类的简介
1.目前我们所学习的一些对象例如(int,str,list,tuple,dict…)这些都是Python的内置对象
类, 简单理解就是相当于一个图纸,在程序中我没玩你要跟根据类来创建对象
类就是对象的图纸,我们也称对象是类的实例(instance)
如果多个对象是通过一个类创建的,我们称这些对象都是一类对象
像 int() float() bool() list()…这些都是类
a = 10
a = int(10) # 创建一个int类的实例 等价于 a = 10
b = str(‘hello’) # 创建一个str的实例
如果我们要自定义类使用大写字母开头 MyClass 谷歌 火狐 360
规矩 规则
print(a,type(a)) # 10 <class ‘int’>
print(b,type(b)) # hello <class ‘str’>
2.定义一个类
使用关键字class来定义
语法 class 类名([父类]):
代码块
class MyClass():
pass
print(MyClass) # <class '__main__.MyClass'>
mc = MyClass() # mc 就是通过MyClass创建的对象,mc是MyClass的实例
print(mc,type(mc)) # <__main__.MyClass object at 0x0000021E848F62E8> <class '__main__.MyClass'>
3. isinstance() 用来检测一个对象是否是一个类的实例
class MyClass():
pass
mc_1 = MyClass()
mc_2 = MyClass()
mc_3 = MyClass()
mc_4 = MyClass()
# isinstance() 用来检测一个对象是否是一个类的实例
result = isinstance(mc,MyClass) # result = isinstance(int,MyClass)
print(result) # print(result)
>>> >>>
True False
03 - 面向对象 - 对象的创建流程
类也是一个对象!!!
类就是一个用来创造 对象的对象
class MyClass():
pass
mc = MyClass()
mc_1 = MyClass()
mc_2 = MyClass()
mc_3 = MyClass()
mc_4 = MyClass()
# isinstance() 用来检测一个对象是否是一个类的实例
result = isinstance(mc,MyClass)
print(id(MyClass),type(MyClass)) # 2105409013784 <class 'type'>
类是type类型的对象 定义类实际上就是定义了一个type类型的对象
a = 6
print(type(a)) # <class 'int'>
格式:
class MyClass():
pass
mc = MyClass()
1.创建了一个变量mc
2.在内存中就创建了一个新的对象
现在我们通过MyClass这个类创建的对象都是一个空的对象
也就是对象中实际上什么都没有,就是相当于 一个空的盒子
我们可以向对象中添加变量 对象中的变量称之为属性
语法 对象.属性名 = 属性值
mc.name = ‘葫芦娃’
mc_2.name = ‘钢铁侠’
print(mc_2.name) # 钢铁侠
使用类创建对象的流程:
创建一个变量mc
在内存中创建一个新的对象
04. 类的定义
类的定义:类和对象都对现实生活中内容的抽象
实际上所有的失误都是有两部分组成
1.数据(属性)
2.行为(方法)
尝试定义一个人类
class person():
# 在类的代码块中,我们可以定义变量和函数
# 在类中我们所定义的变量,将会成为所有实例的公共属性
# 所有实例都可以放访问这些变量
# a = 10
# b = 20
name = 'hlw'
# 在类中也可以定义函数,类中定义的函数,我们称之为方法
# 这些方法也可以通过该类的实例来访问
def say_hello(a):
print('你好')
# pass
# 创建person的实例
p1 = person()
p2 = person()
# print(p1.a,p2.b)
# print(p1.name)
# print(p2.name)
# print(p1.name)
# 调用语法 对象.方法名
# 方法调用和函数调用的区别
# 如果是函数调用,函数有几个形参,则调用函数的时候就要传递几个实参
# 但是如果是方法调用,默认传递一个参数,所有方法中至少要定义一个形参
# 注意:方法调用时,第一个参数有解释器自动传递,所以定义方法时,至少要定义一个形参
p1.say_hello()
# 加括号是调用某某,不加括号就只是个对象
程序1:
class person():
a = 10
b = 20
name = 'hlw'
pass
p1 = person()
p2 = person()
print(p1.a,p2.b)
print(p1.name)
print(p2.name)
>>>
10 20
hlw
hlw
程序二:
class person():
name = 'hlw'
def say_hello(b):
print('你好')
b = person()
b.say_hello()
05. 面向对象 - 属性和方法
实例为什么能访问到类中的属性和方法呢?
类中定义的属性和方法都是公共的,任何该类的实例都可以访问
属性和方法的查找流程
当我们调用一个对象的属性时,解析器会先在当前对象中寻找是否含有该属性
如果有,则直接返回当前对象的属性值
如果没有,则去当前对象的类对象中去寻找,如果有则返回类对象的属性值
如果没有则报错
class person():
name = 'hlw'
p1 = person()
p2 = person()
# 修改p1的name属性值
p1.name = 'gtx'
print(p1.name)
类对象和实例对象都可以保存属性(方法)
如果这个属性(方法)是所有实例共享的,则应该将其保存到类对象中
如果这个属性(方法)是某个实例独有的,则应该保存到实例对象中
在类中方法不能访问类中的属性
class person():
name = 'hlw'
def say_hello(self):
# 第一个参数就是调用方法的本身
# 如果是p1调用,则第一个参数就是p1对象
# 如果是p2调用,则第一个参数就是p2对象
print('你好!我是%s'%self.name)
p1 = person()
p2 = person()
p1.name = '葫芦娃'
p2.name = '钢铁侠'
p1.say_hello() # 你好, 我是葫芦娃
p2.say_hello() # 你好, 我是钢铁侠
>>>
你好!我是葫芦娃
你好!我是钢铁侠