Python学习之面向对象

阅读文本大概需要 6 分钟

写在前面

这两天刚忙完毕业答辩,经历了一场地狱到天堂之旅,还好顺利通过了。今天我们继续 Python 的学习,每天进步一点点。

面向对象

软件编程实质:将我们的思维转变成计算机能够识别的语言的一个过程。其有两种程序设计思想,分别是面向过程和面向对象。先看一些比较官方的解释,后面我们举一个通俗易懂的例子。

什么是面向过程?

自上而下顺序执行,逐步求精;其程序结构是按照功能划分为若干个基本模块,类似于树状结构;各模块之间的关系尽可能简单,在功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构构成的;其模块化实现的具体方法是使用子程序;程序流程在写程序时,就已决定。

面向过程的特点:

强调的是功能行为,关注的是解决问题需要哪些步骤

什么是面向对象?

面向对象编程(OOP)把对象作为程序的基本单元,把数据及对数据的操作方法放在一起,作为一个整体--对象;对同类对象抽象出其共性,形成类;类中的大多数数据,只能用本类的方法进行处理;类通过一个简单的外部接口与外界发生关系;程序流程由用户在使用中决定。

面向对象的特点:

将功能封装进对象,强调具备了功能的对象,关注的是解决问题需要哪些对象。面向对象是基于面向过程的,是一种符合人们思考习惯的思想。可以将复杂的事情简单化,将程序员从执行者转换成了指挥者。完成需求时:先要去找具有所需的功能的对象来用,如果该对象不存在,那么创建一个具有所需功能的对象。

例如:盖房子这个需求,如果用面向过程的思想来解决,你需要先去打地基,买砖,砌墙,按照盖房子的流程一步一步来;而面向对象的思想则是,你需要先去找个盖房子的包工头对象把事情交给他,他再去找打地基、砌墙之类的对象,共同完成这件事。

类与对象1

在 Python 中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。Python 中描述事物通过类的形式体现,类是具体事物抽象概念上的定义,对象即是该类事物实实在在存在的个体。

# object:基类,超类 所有类的父类,一般没有合适的父类就写object

class Person(object):


    """

    定义方法(定义函数) 注意:方法的参数必须以 self 当第一个参数,self 代表类的实例(某个对象)

    构造函数; __init__() 使用类创建对象的时候自动调用,注意:如果不显示的写出构造函数,默认的会自动添加一个空的构造函数

    """


    def __init__(self, name, age):

        # 定义属性

        self.name = name

        self.age = age


    def run(self):

        print("跑步")


    def eat(self, food):

        print("吃" + food)


"""

实例化对象:

格式: 对象名 = 类名(参数列表) 注意:没有参数,小括号也不能省略

"""


p1 = Person("Mark", 18)

# p1 和 p2 是两个不同的实例,类型相同,地址不同

p2 = Person("Iu", 26)

print(p1, p2)

print(type(p1), type(p2))

print(id(p1), id(p2))


"""

访问属性

格式:对象名.属性名

赋值:对象名.属性名 = 新值

"""


p1.sex = 'Man'   # 动态添加属性

print(p.name, p.age, p.sex)


"""

访问方法:

格式:对象名.方法名(参数列表)

"""


p.run()

p.eat("香蕉")

参数 self2

self 代表类的实例,而非类 。哪个对象调用方法,那么该方法中的 self 就代表那个对象,self.__class__ 代表类名 。self 不是关键字,换成其他的标识符也是可以的,但是帅的人都是用 self

 print(self.__class__)  # 类名

  p = self.__class__("Tom", 23)

  print(p.name, p.age)

析构函数3

p3 = Person("Jack", 20)

del p3  # 释放对象

print(p3.age)  # 对象释放以后不能再访问了


# 在函数里定义的对象,会在函数结束时自动释放,这样可以减少内存空间的浪费

def f():

    p4 = Person("Jerry", 21)

__str__() 函数4

重写:将函数定义重写一遍

__str__() : 在调用 print() 打印对象时自动调用,是给用户的,是一个描述对象的方法

__repr__() : 是给机器用的,在 Python 解释器里直接调用敲对象名回车后调用的方法

注意:在没有 str ,且有 repr 时,str = repr

__str__() 的优点:当一个对象的属性很多,并且都需要打印,重写了__str__() 方法后,简化了代码

    def __str__(self):

        return "%s %d" % (self.name, self.age)

    # 以下三行代码结果相同

    print(p2)

    print(p2.__str__())

    print(p2.name, p2.age)

课后作业:

1. 把一头 8t 重的灰色雄性大象装进冰箱里

2. 写一个人开枪射击子弹的功能,每射击一次,子弹少一发,没子弹时可以再装子弹

写在最后

最后给大家送波福利!如果你打算入手或着正在学习Python,欢迎加入我们一起学习。后台回复「Python」,获取到你想要的资源。同时我们组建了一个Python技术学习群,里面大佬与小白都有,有良好的学习氛围。想要进群学习的,加 Mark 微信「IMark950831」,备注「加群」,期待你的到来!

原文发布于微信公众号 - Python梦工厂(AzMark950831)

原文发表时间:2018-06-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏『不羁阁』 | 行走少年郎专栏

OC知识--彻底理解内存管理(MRC、ARC)

33660
来自专栏用户2442861的专栏

C++智能指针简单剖析

http://blog.csdn.net/lanxuezaipiao/article/details/41603883

6410
来自专栏take time, save time

你所能用到的数据结构之番外篇---逆袭的面向对象(一)

     对于番外篇,我深刻能明白在大多数人眼里就和电视剧的广告一样,说实话,我也不喜欢这种感觉,因为这样会让人觉得是在欺骗消费者啊~~~阿西巴~~~但是我实在...

34980
来自专栏Albert陈凯

Scala Essentials: 字符串内插值

字符串插值 Scala是一门高度可扩展性的程序设计语言,保持微小的内核,但具有无穷大的扩展能力。例如,「字符串内插」功能,Scala语言并不是原生地支持该特性...

29470
来自专栏CDA数据分析师

码如其人,同学你能写一手漂亮的Python函数吗

与多数现代编程语言一样,在 Python 中,函数是抽象和封装的基本方法之一。你在开发阶段或许已经写过数百个函数,但并非每个函数都生而平等。写出「糟糕的」函数会...

14930
来自专栏机器学习从入门到成神

设计模式之静态工厂、工厂方法和抽象工厂的联系与区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/articl...

9020
来自专栏机器之心

码如其人,同学你能写一手漂亮的Python函数吗

与多数现代编程语言一样,在 Python 中,函数是抽象和封装的基本方法之一。你在开发阶段或许已经写过数百个函数,但并非每个函数都生而平等。写出「糟糕的」函数会...

13620
来自专栏Python小屋

Python字符串处理小案例

连续5天30个小时的Python培训圆满结束,明天早上5点半出发赶飞机回烟台,晚上收拾行李的时候突然想起来20年前做过的一个C语言题目:假设有一个字符串,里面有...

30350
来自专栏老马说编程

计算机程序的思维逻辑 (14) - 类的组合

上节我们通过类Point介绍了类的一些基本概念和语法,类Point中只有基本数据类型,但类中的成员变量的类型也可以是别的类,通过类的组合可以表达更为复杂的概念。...

23290
来自专栏PPV课数据科学社区

【学习】数据分析师的Python日记-第1天:谁来给我讲讲Python?

今天带来的是PYTHON,这是一篇非常有意思的文章。希望对大家有帮助。 ---- ---- 导语:或许是网上嘈嘈杂杂的关于大数据、互联网的新形势争论,或许是招聘...

21490

扫码关注云+社区

领取腾讯云代金券