python(22)--面向对象1-封装


本系列博文来自学习《Python基础视频教程》笔记整理,视屏教程连接地址:http://yun.itheima.com/course/273.html

1面向过程/面向对象

过程和函数:
过程是一个早期的编程概念,类似于函数,只能执行,没有返回值。
函数不仅能执行,还可以有返回值。

面向过程面向对象:
面向过程:强调怎么做,把完成一个需求的步骤依次完成,根据开发需求,将独立功能封装成一个又一个的函数。
在开发复杂项目,没有固定的功能,开发难度大

面向对象:强调谁来做。根据职责在一个对象中封装更多的方法.
在完成一个需求时,首先确定职责,要明确该职责的对象,最后完成需求只要调用对应的对象就能完成该功能。

面向对象编程的例子–植物大战僵尸:
向日葵:产阳光,摇晃,生命值,主程序要做的就是把向日葵往地上一摆就行了(哈哈哈太搞笑了)
僵尸:啃植物,移动

2面向对象核心概念-类

: 一群具有相同特征或者行为的事物的统称,是抽象的,不能直接使用。类的职责很单一就是为了创建对象用的。

特征被称为属性,
行为被称为方法。

(类:制造飞机使用的图纸,飞机具有什么特征,飞机有什么行为。)

对象:是由类创建的一个具体存在,可以直接使用。在程序开发时应该先有类。

(有了图纸,就可以造真的飞机。)

类和对象的关系:类只有一个,对象可以有很多个,不同对象之间的属性可能不同,(同一张图纸造出来的飞机可能颜色各不相同。)

类中的属性和方法对象中也会有,不会多也不会少。

3类的设计

3.1类三要素-类名、属性、方法

面向对象的开发之前,应该进行需求分析,确定一下,程序中要包含什么类。

设计类时要满足的三个要素
类名: 大驼峰命名,名词提炼法,
属性: 类别的特征
方法: 动词提炼法

例子:
小明今年18岁,身高175,今天早上去跑步,然后去吃饭
小美今年17岁,身高1.65,小美不跑步,小妹喜欢吃东西。

定义:人类:三个属性名字身高年龄,三个方法。

3.2面向对象基础语法

对象无处不在,变量,数据,函数都是对象。

3.2.1查看对象的常用方法

1.ipython中使用.+tab键来确定方法
2.dir(对象)查看的所有方法,带‘__’是内置方法和属性
3.__doc__可以查看函数文档

(ipython 中定义函数,两个回车之后结束定义)

3.2.2类定义

定义一个简单的类(在类中封装方法)

Class 类名:
	Def 方法名(self,参数列表)#第一个参数一定要是self,如果没有其他参数也要写一个self.

3.2.3创建类对象

接收对象的变量同样是对对象的引用,Tom接受猫类对象,为猫对象分配空间,让tom 指向这个对象

变量名=类名()

1.注:用print输出对象变量,会输出这个变量引用的对象 是由哪一个类创建的对象,以及在内存中的地址(以16进制的形式表示)

2.使用同一个类创建的不同的对象 指向的内存地址不同。就是说,引用不同,对象不同。

3.在类的外部给对象增加属性(这种方式很简单,但是不推荐使用)

对象.属性名=“属性值”

在这里插入图片描述
在这里插入图片描述
在类的外部给对象增加属性会造成的隐患:运行时找到属性可以正常执行,找不到属性就会报错。所以,类的属性应该封装在类定义中。

AttributeError: ‘Cat’ object has no attribute ‘name’

3.2.4__init__()方法

用类名+()创建对象时会做两件事:1.自动为对象分配内存空间;2.调用__init__()方法为对象的属性设置初始值(初始化方法)

对象的初始化方法__init__()专门用来定义类的属性。在初始化方法内部定义属性。在初始化方法__init__()中添加形参,在创建对象时,将属性作为实参传入。不同的对象就有不同的属性值。

self.属性名=属性值

3.2.5 self参数

self 保存着对象的引用。哪一个对象调用的方法,self 就是该对象的引用。利用self在 类封装的方法 中输出对象属性。self .属性名 来访问对象的属性。

对象内部属性和方法的调用都是用 self.属性 或者 self.方法 来实现。

3.2.6类内置方法和属性

一般不需要认为去编写,如果重写了该方法就能实现一些神奇的功能。
在python中方法名如果是__xxxx__()的,那么就有特殊的功能,也叫做“魔法”方法。

del()方法–销毁对象

一个对象要被在内存中销毁,系统会自动调用对象的_del_()方法。生命周期:类名创建对象- del 方法调用结束

str()方法–定制化输出对象

print输出对象变量,默认情况下是输出变量 引用的对象 是由哪一个类创建的,以及在内存中的地址。但是,希望输出自定义的内容,就可以调用_str_()方法。

    def __str__(self):
        #必须返回一个字符串
        return "我是小猫[%s]" % self.name

输出对象变量print(tom)时,就不是输出默认内容,而写在_str_方法中的内容。

当使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印从在这个方法中return的数据

参考资料:https://www.runoob.com/note/41154

4面向对象的封装

封装是面向对象编程的一大特点,面向对象编程的第一步–将属性和方法封装到一个抽象的类中,外界使用类创建对象时,让对象 调用类的方法。所有方法的细节,都被封装在类内部。

小明爱跑步:体重75kg,跑步会减肥0.5Kg,吃东西会增重1kg.

class Person:
    def __init__(self,new_name,new_weight):
        self.name=new_name
        self.weight=new_weight

    def eat(self):
        self.weight+=1

    def run(self):
        self.weight-=0.5

    def __str__(self):
        return "%s 重 %.2f kg" % (self.name,self.weight)
xiaoming=Person("xiaoming",65)
#这里定义的类型决定了,该属性能够进行什么操作。
xiaoming.eat()
xiaoming.run()
print(xiaoming)

同一个类创建的不同对象的属性是互补干扰的。

一个对象的属性可以是另一个类创建的对象,被使用的类应该先开发。

4.1 身份运算符号 is、is not

身份运算符号 is、is not,比较两个对象的内存地址是否一致。
比较运算符==判断两个变量的值是否相等。
在Python中对None进行比较时建议使用is进行比较。
在这里插入图片描述

4.2 私有属性和私有方法

在实际应用中对象的某些属性或者方法只希望在对象的内部使用,而不希望外部访问。
私用属性: 对象不希望公开的属性
私有方法: 对象不希望公开的方法

定义方式:在定义属性或者方法时,在属性或者方法名下面 增加 两个下划线,定义的就是私有属性或者方法。实际是伪私有属性 和 伪私有方法,Python解释器会给加下划线的属性名和方法名做特殊处理,使用对应的属性名依旧可以访问。

_类名__属性名

在对象的方法内部,可以访问私有属性,但是在外界,不能访问私有属性(对象名.属性名)或者私有方法(对象名.方法名)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值