关于面向对象:重新认识

622762d0f703918fe4e6e81c5b3d269759eec435.jpg

面向对象概述:

首先,不得不提的是面向对象是一种编程思想,其次,通过对象之间的相互调用和相互协作来完成开发;达到快速开发的目的;大多数用于大型项目开发:

类和对象:python中的对象,一般分为两种:

内置对象
自定义对象

python已经提供了大量的内置对象,方便我们的操作,如数字对象、字符串对象、列表对象、字典对象、元组对象、集合对象、等等;但是又说了~内置对象是不是能描述我们项目中用到的所有的数据类型呢?明显这是不可能的,没有任何一门编程语言能内置好这个世界上出现的或者未曾出现的各种对象,所以除了内置对象,我们还需要自定义对象,自定义类型和对象也是我们本章开始说的重点的内容

2.1. 内置对象

python的内置对象,一般都和我们使用的python模块有莫大的关系,官方纯粹的python中就内置了大量的对象
内置对象 描述 使用方式
数字对象 数字在python中就是对象 1、3.14
字符串对象 字符串也是对象 “hello”
列表对象 List [1,2,3,4,5,6,7]
元组对象 tuple (1,2,3,4,5,6)
集合对象 set {1,2,3,4,5,6,7,8}
字典对象 dict {"name":"jerry", "age":56}
文件对象 file myFile = open("d:/abc.txt")
其他对象 其他使用的模块 easygui.msgbox("你好")
2.2. 自定义类型和对象

类:就是一种数据的类型,就是一种类型,简称类。是对一部分具有相同特征(属性)和相似行为(方法)的对象的抽象。
如:人类,就是一种类,人类表示的是人的类型,类型只是一个描述数据的概念,是一个代号,不是实际存在的事物;这个类可以定义人具有的特征和行为,定义特征(姓名、年龄、性别),定义行为(吃饭、睡觉、工作)。

对象:对象就是某个类表示的具体的实际存在的事物了,具有具体数据来描述自己的特征,也有具体的行为操作。
如:张小凡,就是一个具体的人,有自己具体数据描述的特征(姓名:张小凡、年龄:22、性别:男),有自己具体的行为(吃烧鸡、睡大床、工作->砍竹子)

大师:类,就是类型,是一种数据类型,是一部分具有共同特征(属性)和行为(方法)的对象,抽象出来的一个概念、一个代号。
对象,就是类描述的类型中一个具体存在的事物,是一个具有明确特征数据和行为操作的物体。
  1. python中定义类和创建对象

定义类的步骤:

首先根据我们操作的对象来抽象共同的特征和行为,也称为属性和方法
通过python中的class关键字来定义一个类
在类中,定义这类事物的属性和方法
在使用时,通过类名称()的语法来创建对象

定义类的语法结构

class 类名称(object):
def init(self, 属性列表):
初始化属性
def 方法名称(self):
方法的操作代码

使用类来创建对象

变量名称 = 类名称(属性值)

3.1. 实际操作
3.1.1 通过一个模拟项目,来抽象一个类

创建一个游戏项目,游戏中有玩家的类型,玩家有昵称、账号、密码、职业等属性,有修炼的方法

定义玩家类型

class Player(object):
def init(self, nickname, username, userpass, userjob):
self.nickname = nickname
self.username = username
self.userpass = userpass
self.userjob = userjob
def growUp(self):
print(self.nickname + "在修炼中...")

面向对象的三大特征:

1.封装:

三大类
>> 数据封装
>> 行为封装
>> 属性封装[***]

1.1数据封装

    ~~原始数据存在的问题
    表示一个用户[账号、密码、性别、昵称]
    username = "admin"
    password = "123"
    gender = "男"
    nickname = "小王"

    四个变量互相没有关系~人为规定了 他们四个表示的是一个用户对象
    这四个变量,随时可能被破坏他们的关系[username=True]
    原始多个变量表示一个对象的方式:不稳定因素太大!

    ~~组合数据类型
    表示一个用户,可以将多个数据存在一个组合数据类型变量中
    user = {
        "username": "admin",
        "password": "123",
        "gender": "男",
        "nickname": "小王"
    }
    多个变量,被一个组合数据类型[字典]包装在一起
    完成了多个数据之间的关联

    他们依然不稳定!
    user2 = {
        "account": "admin",
        "userpass": "123",
        "sex": "男",
        "nickname": "小王"
    }

1.3封装属性

属性是属于对象的特征,对象的特征是属于对象的数据
对象的数据~一般不让外界直接访问
python中由于属性公开,对象可以直接调用,数据及其不安全,于是才有了封装属性一说:
封装通过语法限制,让属性私有化,不让外界直接访问
python中规定了,两个下划线开头的属性是私有的
语法上外界不能直接访问

    依然存在问题:但是已经不是问题!
    作为一个有经验的开发人员,你要知道怎么操作私有属性
    知道:知道规范怎么操作;知道破坏性的语法怎么操作!

总结封装:
    在python中,封装按照如下步骤进行操作
    (1) 定义类型,所有属性私有化[双下划线开头]
    (2) 每个属性提供set/get方法[赋值/取值]
        命名规范:赋值:set_属性名称(..)
                取值:get_属性名称(..)
    (3) 在get/set方法中,提供限制条件!

封装的核心思想:
    保障数据安全!
    对象中的数据-> 对象的属性-> 属性数据安全-> 不能直接访问
    对象的中的属性数据->间接访问得到【通过提供的访问方法】
    访问方法:添加获取数据的限制条件、添加数据的限制代码!

2.继承

(1) 什么是继承
继承:让一个类型[子类]继承另一个类型[父类],相当于继承了父类中的公开的属性和方法
在子类中不需要重复编写即可使用,提高了代码的复用性!体现的是A is a B的关系
继承:体现的是类型的继承
如:宠物类型---宠物猫类型--> 宠物猫类型就是一种宠物类型!
继承基本语法:将要继承的父类,包含在当前类型声明的后面的括号中,体现当前类型
继承了指定的父类,就可以操作使用父类中的属性和方法
专业术语:
子类:一般通指当前类型
父类:一般通指被继承的类型;也称为:超类
语法体现:
class A: 父类:要被继承的类型
pass

class B(A):  子类:继承了A类型,可以使用A类型中公开的属性和方法
    pass

继承的意义

子类中可以编写父类中没有的属性和方法
实现功能的扩展!

子类中可以重写,父类中已经在的方法【方法重写】
执行该方法的过程中,如果子类没有重写该方法,执行父类的方法
如果子类重写了该方法,直接执行子类的方法

方法重写:一般是指代继承关系中,子类中重新定义了父类中存在的方法
方法执行时,会动态根据是否重写执行父类/子类中的方法!
方法重载:[python没有方法重载]在一个类型中,出现了两个或者两个以上
相同名称的方法[参数不同],根据传递不同的参数执行不同的方法!
由于python弱类型语言的特性,已经在方法中具备了这样的功能
python中没有方法重载
非要给python添加一个方法重载的概念的话:@property--@method.setter

子类中调用父类的属性\方法
可以直接通过父类名称.属性/方法调用
可以通过super()关键字进行属性/方法的调用

一旦子类和父类之间互相调用属性或者执行方法时,就会出现多态操作

提示:写完代码就忘掉!
通过项目进行磨炼!
通过项目进行总结-> 什么是面向对象、什么是封装、什么是继承、什么是多态!

(3) 继承的操作使用方式:简单的案例【宠物就医】

(4) 继承扩展【多继承-广度优先 VS 深度优先】
多继承操作
python的多继承:体现的是 生活中 一个对象 会有多个角色的概念

注意问题:多继承出现的重名变量属性和行为方法[广度优先 & 深度优先]

3.多态

4.魔法属性和魔法方法

在python中,有的名称会在前面和后面加上两个下划线,由这些名字组成的集合所包含的方法称为魔法方法(或者是特殊方法)。如果对象实现了这些方法中的某一个,那么这个方法会在特殊的情况下(确切地说是根据名字)被python调用。而几乎没有直接调用它们的必要。
首先要讨论的第一个魔法方法是构造方法,它代表着类似于以前例子中使用过的那种名为init的初始化方法。但构造方法和其他普通方法不同的地方在于,当一个对象被创建后,会立即调用构造方法。

  在python中创建一个构造方法只要将init方法的名字从简单的init修改为魔法版本__init__即可:

魔法属性:

访问器是一个简单的方法,它能够使用getHeight,setHeight这样的名字来得到或者重绑定一些特性。如果在访问给定的特性时必须要采取一些行动,那么像这样的封装状态变量就很重要。

今天要复习的就到这里了,以后还会有新的故事,尽请期待,

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,869评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,716评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,223评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,047评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,089评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,839评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,516评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,410评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,920评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,052评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,179评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,868评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,522评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,070评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,186评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,487评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,162评论 2 356

推荐阅读更多精彩内容

  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,219评论 4 16
  • 面向对象介绍 范式编程 编程是程序员用 特定的语法+数据结构+算法 组成的代码来告诉计算机如何执行任务的过程。 一...
    drfung阅读 1,921评论 0 1
  • @(python)[笔记] 目录 前言 在python中,一切皆对象面向对象的程序设计的核心就是对象;面向对象的程...
    CaiGuangyin阅读 592评论 0 5
  • 《得到》App 当我能看懂“光前裕后”,还有这个楼那个房的对联的时候,感谢各位《得到》的朋友和《老浦识字》! 就是...
    Pheeb阅读 92评论 0 0
  • 天,总算凉了下来,不再那么燥热,那么令人难过!我,总算静了下来,不再那么焦虑,那么令人讨厌! 夜晚,我慢跑在江边,...
    无_念阅读 371评论 1 3