二:Python基础篇:python 面向对象篇

很多人,一看到面向对象,就是一脸懵逼
包括我现在也是懵逼的。
自学的话,很难真正的理解他底层的东西。

在python中,有这样一句话:一切揭是对象

python的面向对象有三大功能
(封装, 继承, 多态)
~~~一脸懵逼

其实:面向对象就是按照真实世界客观事物的自然规律进行编译
可以说是一种编程的 思想和模式
简称为:OPP语言

先来代码吧 边写代码边说方法吧!

定义一个类

class name(父类):
类体
(定义一个类的方法很简单 使用class方法定义一个类)
(父类可以省略,默认为object)
(和众多开发语言一样,父类都是object)

类体:主要为类的成员变量和成员函数等等。

二:Python基础篇:python 面向对象篇_第1张图片

第一个框:创建对象
第二个框:对象调用类的方法
执行结果就可以打印出来了!
这是一个简单的类的创建和对象的调用的方法

其实:
init方法是类的构造方法:
这个例子是否直观一点了呢?
二:Python基础篇:python 面向对象篇_第2张图片

self参数是默认的 不需要传递值。
通过Admin这个类创建了 zhangtao 这个对象
调用zhangtao这个对象的age
得到了zhangtao的年纪。 应该直观一点了哈~(我也很懵逼,纯属瞎忽悠)

一般在python中的方法
__双下划线开头的一般称为魔法方法是官方保留的
说起这个来了 说一下python的模仿方法的小结和功能实现吧!
直接上代码吧,边看边讲:

二:Python基础篇:python 面向对象篇_第3张图片

看图:
init方法:为python的构造方法,
str方法: 是针对于让人更好理解的字符串格式化
repr方法: 是针对于让机器更好理解的字符串格式化

下面介绍一下:
hashdir 这两种方法:
算了,他妈的 我也不会 一般用不到 忽略。

讲讲python的控制访问的魔法方法吧
getattr
setattr
delattr
getattribute

直接上代码:(因为这个编辑器个人不习惯上截图吧)

二:Python基础篇:python 面向对象篇_第4张图片

讲解:
创建了一个test的类
通过类 创建了一个 x对象
当调用一个x对象没有的方法的时候
这个时候就会触发 getattr模仿方法
从而将传递进去的字符串 输出。

官方话语:(斯文的说法):
在找不到属性的情况下,正常的继承object的对象都会抛出一个异常
我们这种通过 getattr方法 改变了在找不到属性的时候的类的行为。

二:Python基础篇:python 面向对象篇_第5张图片

上图是setattr方法:
self.world=world 是对初始化的world进行赋值

注意 这个在进行world赋值的时候 就调用了setattr方法,
这个例子来看 world 就是 name world的值就是value
所以进行了改写 从而减了100 得到23

下面来介绍下 delattr方法
二:Python基础篇:python 面向对象篇_第6张图片

在程序执行结束之前,调用了 del方法 删除了这个 x.world
所以会出现 找不到这个对象。

类变量 和 实例变量。

实例变量:
某个个体实例变量 属于对象本身
二:Python基础篇:python 面向对象篇_第7张图片

self.age/self.sex /self.weigh 就称之为实例变量

类变量:
类变量是 所有 实例 共有的变量。

二:Python基础篇:python 面向对象篇_第8张图片

python的私有属性:
单下划线开头: 告诉别人这是私有属性 外部依旧可以访问和更改
双下环线开头: 在程序外面不能访问和更改

python3中类的难点:
私有属性 和 私有方法 是类独自私有的
他不能再类的外部直接调用,但是可以通过类的实例方法来间接性调用。

python中的静态方法
静态方法和类方法在python2.2中被引用
经典类 和 信使 类 都可以使用。
同时。一对内建函数 staticmeethod 和 classmethod 被引入

静态方法:
静态方式是类中的函数 不需要实例化
例子:
import time
class TimeTest(object):
def init(self,hour,minute,second):
self.hour = hour
self.minute = minute
self.second = second
@staticmethod
def showTime()
return time.strftime(“%H:%M:%S”,time.localtime())

print TimeTest.showTime() ## 可以通过类名直接调用静态方法
t = TimeTest(2,10,10)
nowtime = t.showTime()
print nowtime

狭义的讲
静态方法是指勒种无需实例参与 就可以调用的方法(不需要self参数)
在调用静态方法的过程中,不需要实例化。
可以直接在类之后使用. 调用
二:Python基础篇:python 面向对象篇_第9张图片

静态方法python2 和python3 的区别:
在python2中 如果一个类的方法不需要self参数 必须声明他是静态方法
就是加上 @staticmethod这个装饰器

在python3中 如果一个类的方法不需要self参数,不在需要声明静态方法
但是这能 通过这个类去调用这个方法 如果使用实例调用就会引发异常。

###类方法的入门讲解

类方法在python中用到的比较少,可以忽略这一段
类方法传入的第一个参数是 cls ,是类本身。
类方法可以通过类直接调用

代码:
二:Python基础篇:python 面向对象篇_第10张图片
从运行结果来看:
无论是类调用 还是 实例调用 类方法
类方法都能够正常运行

python 类的 继承 和 重写 (面向对象的特性)

二:Python基础篇:python 面向对象篇_第11张图片

当执行这一段代码:
执行 s.name 可以正常执行没有报错
说明 学生这个类 继承了 父亲的name属性

但是执行t.name 的时候报错
说明: Teacher 重写构造函数 导致丢失了name属性

继承父类构造函数的写法:

二:Python基础篇:python 面向对象篇_第12张图片

显示调用父类构造函数 可以解决问题

还有一种python自带的方法 super()方法:

二:Python基础篇:python 面向对象篇_第13张图片

super()函数:可以重写父类的init方法

你可能感兴趣的:(二:Python基础篇:python 面向对象篇)