Python入门到精通】(十三)Python面向对象的开发,没有对象怎么能行呢?|【生长吧!Python】

网友投稿 770 2022-05-29

您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦。

Python是一门面向对象的语言,所以,本文将详细介绍面向对象的思想介绍类,对象以及方法。

干货满满,建议,需要用到时常看看。 小伙伴们如有问题及需要,欢迎踊跃留言哦~ ~ ~。

前言

何为面向对象?

对象

属性

方法

类的定义

构造方法

类对象的创建和使用

self参数的详解

类的变量

实例方法,静态方案和类方法详解

继承

总结

前言

说点题外话:这两天看到郑州市区洪灾的视频真的很让人心痛,洪水真的太可怕了。不过,在天灾面前我们中华儿女团结一致,众志成城。社会各界捐款捐物驰援河南。我看了一幕幕感人的景象,感受到了中国人力量。 作为一个普通人的我觉得应该尽一点点绵薄之力。

今天要介绍的主题是Python的类和对象,重点介绍面向对象的思想以及类的属性和方法。

何为面向对象?

作为一个从Java开发工程师的我对面向对象这个名词是在熟悉不过了。面向对象的三个特性:封装,继承和多态。同样的Python作为面向对象的语言也是有这三个特性的,本文将详细介绍其中的两个特性:封装和继承。那么何为面向对象呢?面向对象(Object-oriented Programming,简称 OOP)的思想其本质上是一种对事物抽象封装的思想。

封装就是将隐藏具体的细节内容,就好像用户使用电脑,只需要简单的操作键盘和鼠标就可以实现一些功能。而无需了解计算机内部是如何实现的。

而在Python语言中的面向对象的封装是将描述特性的数据(属性)和描述行为(方法)封装在一起。

比如现在要描述一个人的话,我们首先会从两方面描述:

从表面特征描述:例如: 肤色,身高,体重,年龄

从所具有的行为描述:例如:会吃饭,会走路,会说话。

如果通过代码来实现的话,其表面特征可以用变量来表示,其行为可以用各种方法来表示。

class Person: # 肤色 colour = '黄色' # 身高 height = '180cm' # 体重 weight = '60KG' # 年龄 age = 18 def eat(self): print('吃饭') def walk(self): print('走路') def speak(self): print('说话') zhangsan=Person() lisi=Person() wanger=Person()

通过构建一个Person类就可以将人的特性和行为都封装起来。人都是有共性的,也就是说可以通过这个类来创建出各种不同的对象。这里不得不说面向对象里的几个核心概念。

类可以理解成可以理解成是一个模板,根据这个模板可以创建出许许多多的具体对象,可以把类想象成是一个模子亦或者是一张图纸。

对象

类并不能直接直接被使用, 通过类创建出来的具体的实例(又称为对象)才能被使用。这就像汽车的图纸与车本身的关系。大多数情况下,图纸并不能被普通人所使用,但是通过图纸创建出的一辆辆汽车能被使用。就像上面通过Person类可以创造出张三,李四,王二麻子。

zhangsan=Person() lisi=Person() wanger=Person()

属性

类中所有的变量都是类的属性,比如上面的身高height,体重weight等属性。

方法

类中的所有函数都被称为方法,不过,和函数有所不同的是类方法至少要包含一个 self 参数(后续会做详细介绍)。就像上面Person类的eat方法,walk方法。另外,就是类中的方法不能单独使用,必须通过类创建的对象调用。

类的定义

类的定义必须要通过class关键字修饰,类名的命名规范建议是每个单词的首字母大写,其余字母小写。

class 类名: 多个(>=0)类属性 多个(>=0)类的方法

就像上面的Person类,其有属性height,weight等几个属性。也有eat,walk等多个方法。

构造方法

不过这里有个隐藏的方法,那就是类构造方法__init__()。该方法是一个特殊的类实例方法。Python是通过该方法来创建类的实例。该方法的方法名是固定的,开头和结尾各有2个下划线并且中间不能有空格。

在创建类之后,Python会创建一个默认的构造方法__init__()。如果没有手动添加__init__()方法的话则使用默认的构造方法创建类的实例(即对象)。 __init__()方法的语法结构是:

【Python从入门到精通】(十三)Python面向对象的开发,没有对象怎么能行呢?|【生长吧!Python】

def __init__(self,...): 代码块

__init__()方法可以有多个参数,但必须包含一个名为self的参数,并且self的参数必须为第一个参数,如果没有其他参数则是默认构造方法。以上面的Person类为例,可以手动添加一个带其他参数的__init__()方法。

def __init__(self, head): self.hand = head

如果手动添加了其他的__init__()方法,则会覆盖掉默认的构造方法。创建对象时会使用你手动添加的__init__()方法。

类对象的创建和使用

创建类对象的过程被称为类的实例化,其语法结构是类名(参数), 当使用的是默认构造方法时或者添加的__init__()方法中仅有一个self参数,则创建类对象时参数可以不写。

但是如果__init__()方法中除了self参数还有其他参数的话,则参数必传。不然,就会报类似于下面的错误。

Traceback (most recent call last): File "/Python_learn/PycharmProjects/python_demo_1/demo/oop/person.py", line 15, in person = Person() TypeError: __init__() missing 1 required positional argument: 'head'

这里就必须要传入head参数。

person = Person('头') person.eat()

self参数的详解

前面几个章节我们多次提到了self参数,那么这个参数到底有啥作用呢?我们知道类是一个模板,通过类这个模板可以创建出许许多多的对象。那么该如何区分这些对象呢?就像每个人都有自己的名字一样,实例化的对象在Python中也有属于自己的代号(自身的引用)。而python正是通过self参数来绑定调用对象本身。说白了就是通过self参数可以知道当前的方法是被谁调用了。专业一点的解释是,当某个对象调用类方法时,该方法会把自身的引用作为第一个参数自动传给该方法。

class Person: def __init__(self): print('正在执行构造方法') def eat(self): print(self, '正在吃饭') zhangsan = Person() zhangsan.eat() lisi = Person() lisi.eat()

其运行结果是:

正在执行构造方法 <__main__.Person object at 0x1031cd0f0> 正在吃饭 正在执行构造方法 <__main__.Person object at 0x103338da0> 正在吃饭

这里实例化了zhangsan和lisi两个对象。当他们同时调用eat方法时,Python会将其自身的引用绑定到self参数上,可以明显的看出不同的调用者其self参数是不同的。这里的self参数就相当于是Java里的this参数。

类的变量

类的变量有三种,分别是类变量,实例变量和局部变量。下面直接举个例子吧!下面代码定义了一个Person类,该类定义了了三个变量,两个方法。

class Person: name = '张三' def __init__(self): self.age = 18 def get_info(self): sex = '男' print('局部变量sex=', sex) return sex print('类属性name=', Person.name) person = Person() print('实例属性age=', person.age) person.get_info()

运行结果是:

类属性name= 张三 实例属性age= 18 局部变量sex= 男

这里name,age以及sex三个变量分别是三种不同的变量。下面就分别介绍一下

其中定义在了类体中,所有函数之外;此范围定义的变量就称为类变量,就像上面代码中的name变量。类变量属于整个类。可以直接通过类名.变量名来获取,就像上面的Person.name。在实际开发中类变量用的比较少。

定义在类体中,函数内部并且以self.变量名定义的变量就称为实例变量。就像上面代码中的age变量。实例变量只作用于调用方法的对象,只能通过对象名访问,无法通过类名访问。调用方式如上面实例中的person.age。

定义在类体中,函数内部的变量以"变量名=变量值"的方式定义的变量就称为局部变量。就像上面代码中的sex变量,局部变量只能在函数内部使用。

实例方法,静态方案和类方法详解

前面介绍完了类中各种类型的变量,接下来就是介绍类中的方法了。类中的方法也可以分为3种。分别是:

类实例方法

类中的方法默认是类实例方法,该类型方法的特点是其最少包含一个self参数用于绑定调用此方法的实例对象,就像上面的get_info方法。这种类型的方法也是在实际开发中最常用的一种方法。

类方法

类方法:通过@classmethod注解修饰并且方法参数最少包含一个cls参数的方法叫做类方法。类方法同样属于类,可以通过类名直接调用。需要特别注意的还cls参数的参数名不能修改,不然调用会报错。

类静态方法

静态方法定义在类这个空间(类命名空间)中,而函数则是定义在程序所在的空间(全局命名空间)中。

class Person: # 类实例方法 def test_selfmethod(self): print('这是一个类实例方法') # 类方法 @classmethod def test_classmethod(cls): print('这是一个类方法') # 静态方法 @staticmethod def test_staticmethod(name): print('这是一个静态方法', name) person = Person() print(person.test_selfmethod()) print(Person.test_classmethod()) print(Person.test_staticmethod('码农飞哥'))

运行结果是:

这是一个类实例方法 None 这是一个类方法 None 这是一个静态方法 码农飞哥 None

继承

说完了封装,接着说下继承吧。就像根据儿子能找到爸爸一样。在Python中object类是作为其他所有类的基类。默认的话创建的类都是继承object类。也可以显示的指定继承的类。

class ParentPerson(object): weight = 150 height = 180 def eat(self, name): print(name + '开始吃饭') class SonPerson(ParentPerson): pass sonPerson = SonPerson() sonPerson.eat('儿子')

运行结果是:儿子开始吃饭

如上代码,ParentPerson类显示指定了其父类object。SonPerson类显示指定了其父类ParentPerson。在SonPerson类中没有定义任何的方法和属性。但是由于其继承了ParentPerson类也就用来了使用ParentPerson类中属性和方法的权利。所以sonPerson对象可以调用eat方法。

总结

本文详细介绍面向对象的思想,以及面向对象的几个核心概念。分别是类,对象,属性,方法。总而言之:类是一个模板,用来将事物的特性和行为封装起来。而对象则是一个个具体的事物。属性用来表示事物的特性。方法用来表示事物的行为。

我是码农飞哥,再次感谢您读完本文。

【生长吧!Python】有奖征文火热进行中:https://bbs.huaweicloud.com/blogs/278897

Python 面向对象编程

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:实战讲解MySQL的expain执行计划,面试官当场要了我
下一篇:Git内部原理之深入解析传输协议
相关文章