派森小镇(七)魔镜

派森小镇的故事

        雾霭沉沉,水波澄碧。在一处悠远僻静的地方上有一个神奇的小镇,小镇的名字叫派森镇。小镇的前面有一条河,碧蓝的水映出小镇周围水墨画般朦胧的世界。

        小镇上的人一出生就拥有特殊的技能,他们中的每一个人都是python的成员,他们用自己的特殊技能构成了千变万化的python世界,他们可以用自己的特殊身份设计与研发。

    “天啊!发生了什么,怎么会这样啊?”

    在派森先生的商店里,有一面不一样的镜子。当变量先生站在镜子面前时,只见变量先生变得只零破碎,构成身体的算法与程序都变成数据显示在镜子里,构成身体所有的零件都变得七零八落。

    听见变量先生的叫声,字符串和小列表都来到了镜子面前。但是,字符串和小列表都像变量先生一样,变得只零破碎、老态龙钟。

    “这还怎么回事啊,这个镜子是不是发生了什么?”小列表问道

变量先生恍然大悟地说:“我想起来了,昨天面向对象来到店里处理程序。突然,他脚底一滑,就把镜子给打碎了,但是今天怎么又恢复如初了呢。”

    字符串说:“或许过几天就好了,咱们还是快点开门吧。”

随即,变量先生就打开了商店的大门,像往常一样,商店外面都是居民在排队。

    变量先生在两个助手的帮助下,流利的处理居民们的问题,为他们解决问题。

    当一个列表处理完程序设定的问题之后,站在镜子面前,镜子中整个身体七零八落,所有的程序设定都变成了数据。

“啊啊啊……”列表感到害怕极了,跑出了商店,居民们看到魔镜都纷纷离开了商店,商店里上一秒还人山人海,下一秒就变成了空空荡荡的。

接连几天,变量先生商店里有一个魔镜这件事情小镇上的人都知道了,商店里也接连几天都没有一个顾客。

    “这可怎么办啊,咱们店里今天还是没有客人。”小列表说道

“叮咚”这时店铺的门开了,走进来的是面向对象。面向对象知道了商店里的魔镜,特意过来看看。

    面向对象走到魔镜面前,很奇怪的是面向对象没有发生任何变化,还是现实的样子。

    “这还怎么回事啊,我怎么没有什么变化呢”面向对象闻到。

此时的镜子竟然开口说话了:“我是魔法镜,你之前打碎了我,我的功能变化了,可以看到每个人的程序和设置。”

    “那怎么样可以把你恢复原样呢。”变量先生问道。

    “是谁打碎了我,就用谁的程序来修好我。可以用面向对象的程序设置修好我。”

    随机,镜子就显示出了面向对象的程序和存在的问题。

    变量先生随即用面向对象的三大特征封装、继承、对态修理镜子。首先,封装隐藏对象的属性和实现细节,只对外提供必要的方法,相当于将细节封装起来,值对外暴露相关的调用方法。随即,继承可以让子类具有父类的特性,提高代码的重用性,从设计上是一种增量进化,原有父类设计不变的情况下,可以增加新功能,或者改进新算法。最后,让一个新类继承自己设计好的类,就具有了已有类的特征。

变量先生修理之后镜子恢复如初。

 

派森先生

    大鹏

相关知识---函数

一、面向对象

1.面向对象的编程思想主要是针对大型软件设计而来的。

2.面向对象编程使得程序的扩展性更强。可读性更好

3.面向对象编程将数据和操作数据相关的方法封装到对象中,组织代码和数据方式更加接近人的思维,从而大大提高了编程的效率。

二、类 属性 方法

(一)类的定义

1.类是模板,系统根据类定义造出的对象。

2.类的内容:属性 方法

3.语法 class类名:

           类体

(1)类名命名规则一般规定首字母大写,驼峰原则

(2)类体中定义属性方法

(3)属性用来描述数据,方法(函数)用来描述数据相关操作

(二)构造方法__init__()与__new__()

1. 初始化对象需要定义构造__init__()方法.构造方法用于给对象初始化

2. 要点

(1)名称固定__init__()

(2)第一个参数是固定的必须为self。Self指刚刚创建的对象

(3)构造函数通常用来初始化实例对象的实例属性

(4)通过类名(参数列表)调用,调用后将创建好的对象赋值返回给相应的变量

(5)__init__方法用于初始化创建好的对象

(6)__new__()方法用于创建对象,一般无需重定义该方法

(7)如果不定义__init__()方法系统会自动创建__init__()方法,定义了该方法系统不会创建默认的方法

(一)实例属性与实例方法

1. 实例属性:从属于实例对象的属性,也成为“实例变量”

(1)实例属性一般在__init__()方法中通过以下代码定义:self.实例属性名=初始值

(2)在本类的其他实例方法中,也是通过self进行访问 ;self.实例属性名

(3)创建对象后,通过实例对象访问

     Obj01=类名() #创建初始化对象,调用__init__()初始化属性

     Obj01.实例属性名 = 值  #可以给自己属性赋值,也可以添加新的属性

2. 实例方法:实例对象的方法

(1)定义 def 方法名(self[形参列表]):

              函数体

(2)定义实例方法第一个参数必须是self

(3)调用实例方法时不需要给self传参

(4)方法与函数区别

  【1】 都是用来完成一个功能的语句块,本质一样

【2】方法调用时通过对象来调研,方法属于特定的实例对象

【3】直观上看,方法定义时需要传递self函数不需要

(5)dir(obj)获取所有的属性方法

(6)__dict__ 返回属性

(7)isinstance(对象,类型)判断对象是不是指定类型

(8)pass空语句

(二)类对象 类属性 类方法

1. 类对象 :定义类时生成类对象

2. 类属性 :从属于类对象的属性,也称为类变量,可以被所有类对象共享

(1)定义 class 类名 :

                类变量名 = 初始值

(2)在类或者类的外面通过类名来读写

3. 类方法:从属于“类对象”的方法。类方法通过装饰器@classmethod

定义   @classmethod

          def 类方法名(cls[参数列表])

             方法体

(1)@classmethod必须位于方法上面一行

(2)第一个cls必须有,cls值“类对象”本身

(3)调用类方法格式:类名:类方法名(参数列表)。参数列表不需要也不能给cls传值

(4)类方法中访问实例属性和实例方法会导致错误。

(5)子类继承父类方法时,传入cls是子类对象,而非父类对象

4. 静态方法:python中允许定义与“类对象”无关的方法成为静态方法

“静态方法”和在模块中定义普通函数没有区别,只不过“静态方法”放到了“类的名字空间里面”,需要通过“类调用”

(1)静态方法通过装饰器@staticmethod来定义  

     @staticmethod

  def 静态方法名([形参列表])

    方法体

(2)@staticmethod必须位于方法上面一行

(3)调用静态方法格式:类名.静态方法名(参数列表)

(4)静态方法中访问实例属性,和实例方法会导致错误

(三)del析构方法 垃圾回收机制

1. 垃圾:一个对象没有被引用时(引用计数为0时),就会被当成垃圾,调用__del__()方法

2. __del_方法又称析构方法,同于实现对象被销毁时所需的操作

3. 也可以通过del语句删除对象,确保调用__del__方法

4. 系统自定义该方法,不需要自定义析构方法

(四)__cell__方法和可调用对象

1. python中,凡是可以将()直接应用到自身并执行,都称为可调用对象

2. 可调用对象包括自定义函数,内置函数,实例对象

3. 定义了__celll__()方法的对象称为可调用对象,即该对象可以向函数一样被调用

4. 该方法使得实例对象可以像调用普通函数那样以“对象名()”的形式调用

(五)方没有重载方法动态性

1. python中的方法没有重载,在类体中定义多个重名的方法只有最后一个有效

2. Python是动态语言。可以动态添加新的方法,动态修改已有方法

(八)私有属性 私有方法

1. 私有约定

(1)两个下划线开头的属性是私有的,其他的为公共的

(2)类内可以访问私有属性(方法)

(3)类外部不能直接访问私有属性(方法)

(4)类外部可以通过_类名__私有属性(方法名)访问私有属性(方法)

(九)@property装饰器

1.@property装饰器将一个方法的调用方式变为属性调用

2.@property装饰器主要处理属性的读操作写操作

(十)属性方法命名总结

1.属性方法命名

(1)_xxx:保护成员不能用from module import*导入,只有 类对象和子对象能访问这些元素

(2)__xxx__系统定义的特殊成员

(3)__xxx:累的私有成员,只有类对象自己访问,外部可通过对象名._类名__访问

2.类编码风格

(1)类名首字母大写,多个单词驼峰原则

(2)实例名模块名小写多个单词用下划线分开

(3)每个类应紧跟文档字符串说明类的作用

(4)可以用空行组织代码,类中使用一个空行隔开方法,模块中使用两个空行隔开类了

(十一)none对象

1.none是一个特殊常量,表示变量没有指向任何对象

2.在python中none本身也是对象,有自己的类型Nonetype

3.可以将None赋值给任何变量,但不能创建nonetype类型的对象

4.if语句判断时空列表。空字典、空元组 0 等都转成FALSE

5 is ==判断时 空列表 空字典 空字符 0 None不会传成False

三、面向对象三大特征(封装 继承 多态)

(一)封装 (隐藏)

隐藏对象的属性和实现细节,只对外提供必要的方法,相当于将细节封装起来,值对外暴露相关的调用方法。通过私有属性私有方法封装

(一) 继承

继承可以让子类具有父类的特性,提高代码的重用性,从设计上是一种增量进化,原有父类设计不变的情况下,可以增加新功能,或者改进新算法

2. 如果一个新类继承自己设计好的类,就具有了已有类的特征。已有的类称为父类或者基类,新的类称为子类或者派生类

3. Python支持多重继承,一个子类可以继承多个父类

4. 继承语法:class子类类名 (父类1[,父类名2,....]):

                类体

5. 如果类定义没有指定父类默认父类是object类

6. 关于构造函数:

(1)子类不重写__init__实例化子类时,会自动调用父类定义的__init__

(2)子类重写了__init__时,实例化子类就不会调用父类已经定义的__init__

(3)如果重写了__init__时,要继承父类的构造方法,可以使用super关键字,也可以使用 父类名.__init__(self,参数列表)调用

7. 成员继承;子类继承了父类除了构造之外的所有的属性和方法

8. 方法重写:子类可以重新定义父类的方法,就会覆盖父类方法称为重写、

9. 通过mro()方法或者__mro__可以输出这个类的继承层次结构

10. 多重继承:一个子类111可以有多个父类,这样就具备了多个父类的特点

11. Super()获得父类的定义:如果想调用父类的方法时,可以通过super()来做

  Super()代表父类的定义不是父类的对象;调用父类构造方法:super(子类名称.self).__init__(参数列表)

12.Object根类:oobject是所有类的父类,因此所有的类都有boject的属性方法

方法本质也是属性

13.重写str方法

(1)__str__方法,用于返回一个对对象的描述。将对象转成对字符串描述(内置函数str()就是调用该方法)

(2)经常用于print()方法查看信息

14.MRO方法解析顺序

(1).python支持多继承,如果父类中有相同的名字方法,在没有指定父类名字时按从左王右顺序搜索

(2).MRO:方法解析顺序。我们可以通过mro()分析法获得类的层次结构,方法解析顺序也是按这个“类的层次结构”寻找的。

(二) 多态

1.多态是指同一方法调用,由于对象不同会产生不同的行为。

(1)多态是方法的多态,属性没有多态

(2)多态必要条件 继承 重写

四.特殊方法 特殊属性

运算符是通过对象的特殊方法实现的

五、 对象的浅拷贝深拷贝

1. 浅拷贝不拷贝对象的子对象,python的拷贝一般是前拷贝

2. 深拷贝通过depcopy函数递归拷贝子对象的子对象

六 、组合

1. 除了继承组合也能实现代码的重用。核心是将父类对象作为子类的属性

   组合继成如何选择

(1)是什么关系  is-a    继成

(2)有什么关系  has-a    组合

七、设计模式

设计模式:对某一类问题固定做法

(一)工厂模式

1. 工厂模式实现了创建者和调用者分离,使用专门的工厂类将选择实现类、创建对象进行同一管理的和控制

(二)单例模式

单利模式的核心作用是确保一个类只有一个实例,并且提供一个访问该实例的全局访问点

派森

先生

派森

先生

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据小金

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值