python之面向对象介绍(一)

1. 面向对象简介

1.1 面向过程

(1)定义:面向过程指将我们的程序分解为⼀个⼀个步骤,通过对每个步骤的抽象来完成程序。
(2)特点:这种编程方式符号人类的思维,编写起来比较容易,但编写方式往往只适用于⼀个功能,如果要实现别的功能,往往复用性比较低。
(3)举例:

  1. 妈妈穿衣服穿鞋出门
  2. 妈妈骑上电动车
  3. 妈妈到超市门口放好电动车
  4. 妈妈买西瓜
  5. 妈妈结账
  6. 妈妈骑电动车回家
  7. 到家孩子吃西瓜
    这个过程就一步一步慢慢来,有逻辑地以一种阐述故事情节的方式展开。

1.2 面向对象

(1)定义:Object Oriented Programming(简称OOP)。OOP把对象当成一个程序的基本单元,一个对象包含了数据和操作数据的函数(简单理解就是语言中的所有操作都是通过对象来进行的,即包含对象的对象)。
(2)特点:关注的是对象,而不注重过程,对于面向对象⼀切皆对象。这种编码⽅式比较容易阅读,并且易于维护,容易复用。但是编写的过程中不太符合常规的思维,编写相对麻烦。

(3)典型代表为:类(class):其用来描述具有相同的属性和方法的对象的集合。其中,“属性”就等同于“变量”,方法就等同于“函数”。
(4)举例:

面向过程的例子转为面向对象的例子为:
孩子妈妈给孩⼦买瓜来解决
面向对象的编程思想,将所有功能统⼀保存到对应的对象中,要使用某个功能,直接找到对应的对象即可。即妈妈做的事情、妈妈的特点,归到妈妈这个类中(做的事情,就相当于类的方法(函数),妈妈的特点就相当于类的属性(变量))

(4)典型代表为:类(class):其用来描述具有相同的属性和方法的对象的集合。其中,“属性”就等同于“变量”,方法就等同于“函数”。

2.类的初步介绍(class)

2.1 类的引入

我们目前学习的都是 Python 的内置对象,但是内置对象并不都能满足我们的需求,所以我们在开发中经常要自定义一些对象。
(1)类的简介

  • 类简单理解就是一张图纸 在程序中我们需要根据类来创建对象
  • 我们也称对象是类的实例(instance)
  • 如果多个对象是通过一个类创建的,我们称这些对象是一类对象
'''
类的简介:
类简单理解就是一张图纸 在程序中我们需要根据类来创建对象
我们也称对象是类的实例(instance)
如果多个对象是通过一个类创建的,我们称这些对象是一类对象
'''

a = 1 # int、float、str、bool、list都是类 ,而a是类的实例化,或者说是对象(instance)
print(a,type(a))  # 1 <class 'int'> 通过这个就可以看出
print(isinstance(a,int))  #或者 通过isinstance() 来检查一个对象是否是另一个类的实例 True

(2)自建类的需要
但是python中内置对象有时候不满足我们的需求,如我们要设置一个“人类”的对象,里面包含着这类“人”的特点(属性)、行为(方法),这个时候,我们就需要自己创建一个类,来存储它的特点和行为。
如小学生(primary_student):特点:年龄7-12岁,行为:喜欢写完作业玩游戏这个时候我们就可以创建一个小学生类(student)

2.2类的介绍

(1)定义
通过上面,我们大致对类有个了解。类是用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。而对象是类的实例。

类和对象都是对现实生活中事物的抽象
实际上所有的事物都有两部分构成:
1.特征(属性)
2.行为(方法)

(2)类的命名:自定义的类,类的名字要使用大写字母开头,使用大驼峰命名法
(3)类的语法:

# class 类名([父类]):
#       代码块
class Primary_Student:
    age = '7-12岁'

(4)类的类型:

  • 类也是一个对象 用来创建对象的对象
  • 类是type类型的对象 定义类实际上就是定义了一个type类型的对象
print(Primary_Student,type(Primary_Student))  # <class '__main__.Primary_Student'> <class 'type'>
# 类也是一个对象 用来创建对象的对象
# 类是type类型的对象 定义类实际上就是定义了一个type类型的对象

2.3 类的实例化

定义类之后,可以将其实例化,如:
John是一个小学生、Sarh是一个小学生、Claire是一个小学生
那么可以将其进行Primary_Student类的实例化,即作为Primary_Student类的对象

'''
定义类之后,可以将其实例化,如:
John是一个小学生、Sarh是一个小学生、Claire是一个小学生
那么可以将其进行Primary_Student类的实例化,即作为Primary_Student类的对象
'''
# 我们可以通过isinstance() 来检查一个对象是否是另一个类的实例
John = Primary_Student()
print(isinstance(John,Primary_Student))  # 结果:True
Sarh = Primary_Student()
print(isinstance(Sarh,Primary_Student)) # 结果:True
Claire = Primary_Student()
print(isinstance(Claire,Primary_Student)) # 结果:True

2.4 类的属性

属性等同于变量。类的实例化后就是对象,对象不仅可以创建属于自己的属性(变量),我们称之为私有属性,还可以引用所指向的类里面的属性(变量)。我们称之为公用属性。
(1)语法

语法:
对象.属性名 = 属性值

(2)类的公用属性

  • 在类的代码块中,我们可以定义属性和方法(或者是变量和函数)
  • 在类中我们定义的属性,将会成为所有实例的公共属性
  • 所有实例都可以访问这些属性(变量)
class Primary_Student:
    age = '7-12岁'  # age为公共属性

(3)对象的私有属性

  • 对象自身创建的变量。
  • 类的对象既可以引用类的属性,也可以创建自己的属性。并且私有属性优先于公共属性
# 引用类的属性和方法(公共属性)
print(John.age)  # 结果为7-12岁
print(Sarh.age)  # 结果为7-12岁
print(Claire.age)  # 结果为7-12岁
# 可以创建自己的属性,如创建自己的名字
John.name = 'John'
print(John.name) # 结果为John
Sarh.name = 'Sarh'
print(Sarh.name) # 结果为Sarh
Claire.name = 'Claire'
print(Claire.name) # 结果为Claire

(4)属性的寻找顺序
私有属性优先于公共属性
A 当我们调用一个对象的属性时,解析器会在当前对象中寻找是否含有该属性
B 如果有,则直接返回当前对象的属性值
C 如果没有呢,则去当前对象的类对象中去寻找,如果类对象中有则返回类对象中的属性值
D 如果类对象中没有,则报错

# 私有属性优先于公共属性
print(John.age) # 结果为7-12岁
John.age  = '8岁'  # 设置John对象的私有属性age
print(John.age) # 结果为8岁

2.5 类的方法

(1)定义

  • 在类中也可以定义函数 类中定义的函数我们称之为方法
  • 这些方法可以通过该类的实例来访问

(2)方法与函数的区别

  • 如果函数调用 调用的时候有几个形参,就会传递几个实参
  • 但是如果是方法调用,默认传递一个参数。方法中至少定义一个形参
  • 方法调用的定义一个默认形参是为了声明是这个对象调用了函数,一般是用self
  • 所以self是指对象,对象是谁,self就是谁
class LogisticStudent:  #创建类
    def Student(self):
        print('this is an example.')
        print(self,self.name,self.age)

chen = LogisticStudent()
chen.name = 'claire'
chen.age = '18'
chen.Student() #结果:
# this is an example.
# 打印出的是对象地址 <__main__.LogisticStudent object at 0x000002777AAEB348>
# 打印出对象的私有属性claire 18
print(chen)  #打印出的是对象地址  <__main__.LogisticStudent object at 0x000002777AAEB348>

3.总结练习

'''
再创建一个Person类巩固如下内容:
    (1)属性和方法的查找流程:对象私有属性优先于类的公共属性
    (2)self是对象的代理
'''
class Person:
    name = '蜘蛛侠'
    def speak(self):
        print(self)
        print('你好我是%s'%self.name)
        # print(a)
p1 = Person()
p2 = Person()
p1.name = '钢铁侠'
p2.name = '绿巨人'

p1.speak() # <__main__.Person object at 0x000001D83E0CE8C8> # 你好 我是钢铁侠
print(p1) # <__main__.Person object at 0x000001D83E0CE8C8>
p2.speak() # <__main__.Person object at 0x000001D83E0CE6C8> # 你好 我是绿巨人
print(p2) # <__main__.Person object at 0x000001D83E0CE6C8>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值