基础--12、面向对象Ⅰ

在这里插入图片描述

一、面向对象的简介

  • 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.在面向对象的函数中,类是最大的,执行顺序也是优先执行的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值