python11(面向对象编程)

一.引子

笔者最近被公司安排从运维去转成运维开发,所以也开始不断精进自己脚本方面的知识。面向对象编程可以说是python的核心了。让我们一起来看看

二.面向对象编程介绍

  • 如今主流的软件开发思想有两种:一个是面向过程,另一个是面向对象。面向过程出现得较早,典型代表为C语言,开发中小型项目的效率很高,但是很难适用于如今主流的大中型项目开发场景。面向对象则出现得更晚一些,典型代表为Java或C++等语言,更加适合用于大型开发场景。两种开发思想各有长短。
  • 对于面向过程的思想: 需要实现一个功能的时候,看重的是开发的步骤和过程,每一个步骤都需要自己亲力亲为,需要自己编写代码(自己来做)
  • 对于面向对象的思想:当需要实现一个功能的时候,看重的并不是过程和步骤,而是关心谁帮我做这件事(偷懒,找人帮我做)
  • 面向对象的三大特征有:封装性、继承性、多态性。
面向过程编程
1. 导入各种外部库
2. 设计各种全局变量
3. 写一个函数完成某个功能
4. 写一个函数完成某个功能
5. 写一个函数完成某个功能
6. 写一个函数完成某个功能
7. 写一个函数完成某个功能
8. ......
9. 写一个main函数作为程序入口
 
面向对象编程
10. 导入各种外部库
11. 设计各种全局变量
12. 决定你要的类
13. 给每个类提供完整的一组操作
14. 明确地使用继承来表现不同类之间的共同点
15. 根据需要,决定是否写一个main函数作为程序入口

洗衣服
1.面向过程(手洗):脱衣服、找一个盆、加水、加洗衣粉、浸泡30分钟、搓洗、拧衣服、倒掉水、再加水、漂洗、拧衣服、倒掉水、晾衣服。
2.面向对象(机洗):脱衣服、放入洗衣机、按下开关、拿出衣服晾晒。

买电脑
1.面向过程(自己买):需要电脑、查询参数信息、横向比较机型、了解打折信息、与店家讨价还价、下单、收快递、开机验货、确认收货。
2.面向对象(找人买):需要电脑、找秘书帮我买、收电脑。

三.类和对象

面向对象编程的2个非常重要的概念:类和对象.

1.类和对象的区别

  • 类是抽象的概念,仅仅是模板 比如说:“人类”,当然还可以分为男人和女人。
  • 对象是一个你能够看得到、摸得着的具体实体: 赵本山,刘德华,赵丽颖.

2.类的属性和行为

类中也有属性、行为两个组成部分,而“对象”是类的具体实例

  • 属性:事物的特征描述信息,用于描述某个特征“是什么”。
  • 行为:事物的能力行动方案,用于说明事物“能做什么”。

3.类的构成

类中也有属性、行为两个组成部分,而“对象”是类的具体实例

  • 属性:事物的特征描述信息,用于描述某个特征“是什么”。
  • 行为:事物的能力行动方案,用于说明事物“能做什么”。
1)人类设计:

事物名称(类名):(Person)
属性:身高(height)、年龄(age)
方法(行为/功能):(run)、打架(fight)

四.类的定义

1.创建类

在 Python 中要定义一个只包含方法的类,语法格式如下:

class 类名:

    def 方法1(self, 参数列表):
        return

    def 方法2(self, 参数列表):
        return
#大家注意参数self

2.创建方法

当一个类定义完成之后,要使用这个类来创建对象,语法格式如下:

对象变量 = 类名()

3.创建自己的第一个面向对象的程序

class Hero:
    """这是一个英雄"""
    def __init__(self,name,flood):
     #定义英雄初始属性
        self.name = name
        self.flood = flood
       

    def run(self):
    #定义英雄的第一个方法
        print(self.name+"正在赶往召唤师峡谷,",self.flood)
    
    
    def fight(self,link):
    #定义英雄的第二个方法
        print(self.name+"英雄正在激烈对战",self.flood+"正在以每分钟20点下降,即将阵亡")
        self.link = link
        print(self.link+"与"+self.name+"合体发出合击绝技:天神下凡")
    #定义英雄的第二个方法
hero1 = Hero("后羿","初始血量100")
#创建第一个英雄对象"后裔",初始血量为100
hero1.run()
#调用创建的第一个方法
hero1.fight("嫦娥")
#调用第二个方法,并导入参数嫦娥

运行效果
后羿正在赶往召唤师峡谷, 初始血量100
后羿英雄正在激烈对战 初始血量100正在以每分钟20点下降,即将阵亡
嫦娥与后羿合体发出合击绝技:天神下凡

由输出可见,当我们使用
x对象.x方法()
的时候,python会自动将x对象做为实参传给x方法的self参数。 也可以这样记忆,谁点(.)的方法,self就是谁。
这里我们调用了__init__的魔法属性:在创建对象的时候,就已经拥有这些属性。如果没有这个属性的话,我们只能在对象定义属性了。

五.

.python的魔法属性

上面我们提到了第一个python的魔法属性,接下来笔者给大家介绍一下更多python的魔法属性。

1.魔法方法1(init

在创建对象的时候,并设置对象属性。

#有参数的__init__方法
def __init__(self,name,flood):
     #定义英雄初始属性
        self.name = name
        self.flood = flood
        
#无参数的__init__方法
class Hero:
    """这是一个英雄"""
    def __init__(self):
        self.name = "后羿"
        self.flood = "100"
        #定义英雄初始属性

    def run(self):
        print(self.name+"正在赶往召唤师峡谷,",self.flood)
    #定义英雄的第一个方法
    def fight(self,link):
        print(self.name+"英雄正在激烈对战",self.flood+"正在以每分钟20点下降,即将阵亡")
        self.link = link
        print(self.link+"与"+self.name+"合体发出合击绝技:天神下凡")
    #定义英雄的第二个方法
hero1 = Hero()
#创建第一个英雄对象"后裔",初始血量为100
hero1.run()
#调用创建的第一个方法
hero1.fight("嫦娥")
#调用创建的第二个方法

①在类内部获取 属性 和 实例方法,通过self获取;
②在类外部获取 属性 和 实例方法,通过对象名获取。
③如果一个类有多个对象,每个对象的属性是各自保存的,都有各自独立的地址;
④但是实例方法是所有对象共享的,只占用一份内存空间。类会通过self来判断是哪个对象调用了实例方法。

2.魔法属性2( str() )

当使用print输出对象的时候,默认打印对象的内存地址。如果类定义了__str__(self)方法,那么就会打印从在这个方法中 return 的数据
实例:

#没有__str__
class Hero:
    """这是一个英雄"""
    def __init__(self):
        self.name = "后羿"
        self.flood = "100"
        #定义英雄初始属性

    def run(self):
        print(self.name+"正在赶往召唤师峡谷,",self.flood)
    #定义英雄的第一个方法
    def fight(self,link):
        print(self.name+"英雄正在激烈对战",self.flood+"正在以每分钟20点下降,即将阵亡")
        self.link = link
        print(self.link+"与"+self.name+"合体发出合击绝技:天神下凡")
    #定义英雄的第二个方法
    
hero1 = Hero()
#创建第一个英雄对象"后裔",初始血量为100
hero1.run()
#调用创建的第一个方法
hero1.fight("嫦娥")
#调用创建的第二个方法
print(hero1)

有__str__
 def __str__(self):
        return  self.name
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值