Python面向对象编程基础之面向对象思想和特点、类和对象

简介: Python面向对象编程基础之面向对象思想和特点、类和对象

很多学Python伙伴问题有没有体系的面试题?

今天为大家推荐一款刷题神奇哦 :刷题面试神器牛客

各大互联网大厂面试真题。从基础到入阶乃至原理刨析类面试题 应有尽有,赶快来装备自己吧!助你面试稳操胜券,solo全场面试官


一、如何理解面向对象


面向对象是一种看待事物的思想,一种视觉角度,分析方式,我们可以把任意一个事物看成是一个对象,分析它身上具备的主要特征,这个就是面向对象思维;这样的思维方式很像数据库中的E-R图,将一种事物的特征、属性和行为给分离出来。我们一般写代码都是从开始到结束呈线性流程化模式写完整个程序,这种思想是典型的面向过程思想。而在写代码中面向对象编程,是将执行这些步骤时,把开发时要实现的功能提取出来,分成很多个小模块自定义函数去实现这些功能,而主体函数则去想使用这些自定义函数实现功能后如何运用。


二、面向对象和面向过程的区别


举个例子,就像我们打英雄联盟:


面向过程思想:


选择英雄-小丑

补兵升级

当老六拿人头

得钱买装备

推掉防御塔

推掉老家

面向对象思想:


了解英雄属性角色定位

了解补兵补刀拿钱规则

游戏输赢规则

确定如何去赢

以上可以很明显的看出,面向过程看重的是程序开发一步一步功能实现,从上到下每一个功能逐个实现。而面向对象则是先把要实现的功能需求先搞懂,划分每个模块规则应该是做什么。我们之所以鼓励在开发过程中更多的去使用面向对象的方法,是因为模块化的程序很容易维护,哪个功能出问题后根据管理对应模块的代码去改就好了。而且根据相同的类可以重写它的方法,而这也是面向对象的一大特点,待会会详细讲述。


三、面向对象的特点


1.封装


封装相当于给我们写的代码‘’打包‘’,也就是写一个def()自定义函数,将我们这段代码实现的功能直接写到def()这个函数里面,输入和输出将以参数和返回参数的形式出来。


就比如我们要读一个文件:

with open('config.json','r')as json_f:
    jobs=pd.read_json(json_f,orient='value')

封装之后:

def read(file):
    with open(file','r')as json_f:
        jobs=pd.read_json(json_f,orient='value')
    return jobs
read('config.json')

这样以来我们就明白这段代码就是实现read文件这个意思,增强了代码的可读性。而且当读文件这段代码不起作用了的时候,我们也不用一段一段代码去看,直接去read这函数下面找bug就行了。


值得一提的是,封装在语言的体现中有两点。第一点是类的封装,第二点是函数,其实二者语法体现不同,运用场景不同,但是在本质上都是对一堆面向过程的代码封装,我们只要封装一次,后续就可以一直调用。


2.继承


这个也好理解,如我们玩明日方舟那样的塔防游戏。比如近战这个类别来说,近战也分有先锋、重装、近卫这几种类别。一个类别中又有很多个不同的类别,他们都属于近战这个类别但又拥有其他不同的属性,这就是继承。继承同为近战的属性。


class close_attack:
    pass
class pioneer(close_attack): 
    pass
class reinstall(close_attack): 
    pass
class reinstall(close_attack): 
    pass


而先锋、重装、近卫又有很多个不同的分支,这样使得函数功能越来越丰富,解决了类与类之间代码冗余的问题。


3.多态


多态可以理解为同一个函数用法在不同的类别里面,可以有多个不同的功能:

class close_attack:
    def power(self):
        print("基础攻击力100")
class pioneer(close_attack): 
    def power(self):
        print("基础攻击力60")
class reinstall(close_attack): 
    def power(self):
        print("基础攻击力80")
class reinstall(close_attack): 
    def power(self):
        print("基础攻击力120")

python中是支持多态的,但是是有限的的支持多态性,主要是因为python中变量的使用不用声明,所以不存在父类引用指向子类对象的多态体现,同时python不支持重载。在python中 多态的使用不如Java中那么明显,所以python中刻意谈到多态的意义不是特别大。


四、Python类


首先类的概念是通用的,只不过在不同的编译语言环境下解释可能会有不一样的意思。类是抽象的概率,是一种数据结构:就像是生活中具有某类相同特质的物品或是相同行为的同一类事务,把具有相同属性和方法的对象归为一个类(class)。


基础解释-类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。


在Python中你也可以创建一个Class而且不会报错,虽然python多为脚本语言但也可以实现耦合编程。一个类里面有多个函数,提供该类别的基础功能,创建一个新类意味着创建一个新的对象类型从而可以根据该类衍生出多种多样的新的类别对象。


Python的类提供了面向对象编程的所有标准特性:


类继承机制允许多个基类,派生类可以覆盖它基类的任何方法,一个方法可以调用基类中相同名称的的方法

对象可以包含任意数量和类型的数据

和模块一样,类也拥有Python天然的动态特性:它们在运行时创建,可以在创建后修改

Python定义类语法如下:


  class ClassName:
    语句1
    ...
    语句n

就像我们一开始定义的近战类一样。


实例方法:

class close_attack:
    attack_power=100
    def power(self):
        print("基础攻击力100")

在类里面可以写入函数(也称为方法),写入特征(也称为属性)。例如上述例子attack_power就是这个close_attack类的属性,power()函数就是这个类的行为方法。


在类中定义方法的形式和函数差不多,但其不称为函数,而是叫方法。方法的调用需要绑定到特定的对象上(通过self.或实例对象名),而函数不需要。该方法的第一个参数必须为self。属性在代码层面上来看就是变量,方法实际就是函数,通过调用这些函数来完成某些工作。有两个必须要注意的点:


类内部的函数定义通常具有一种特别形式的参数列表,这个特别形式就是第一个参数必须是self。

方法是所有实例都共用的:类外所有实例都可以调用类中的方法,类中方法之间也可以相互调用

当然如果我们不执行该类是不会有任何作用的,系统不会给他分配空间:

sister42=close_attack()
sister42.power()
#基础攻击力100

值得注意的是,进入类定义时,就会创建一个新的命名空间,并把它用作局部作用域因此,所有对局部变量的赋值都是在这个新命名空间内进行的。


Python类中的方法分为:实例方法、类方法、静态方法。上述我们进行实例化对象就为实例方法。


类方法


@classmethod装饰之后就是类方法:

class close_attack:
    attack_power=100
    @classmethod 
    def power(self):
        print("基础攻击力100")


类方法不需要实例化, 但是方法的第一个参数接收的一定是类本身。


静态方法:

class close_attack:
    @staticmethod
    def power():
        print("基础攻击力100")
    def defense(self):
        print("基础防御100")
close_attack.power()
close_attack.defense

out:

基础攻击力100


<function __main__.close_attack.defense(self)>


可以看出静态类可以直接被调用,且不用加任何参数、self也不要。静态方法存在的意义其实就是让函数归类,紧耦合。


五、Python类对象


Python中一切皆对象。不管是我们自己定义的类、6种基本数据类型还是内置的类(第三方类)等都称作为对象。类也是一种对象类型,跟前面学习过的数值、字符串、列表等等是一样的。


比如这里我们建立的close_attack、pioneer等皆为对象。它们都有属于自己的属性和方法。类对象支持两种操作:属性引用和实例化。


实例化:

sister42=close_attack()


就是一种实例化的方式,格式为实例对象名 = 类名()


属性引用:

sister42.power()
sister42.attack_power

这就为属性引用,可以引用父类的变量和方法,都是可以继承到子类的。

目录
相关文章
|
5月前
|
安全 大数据 程序员
Python operator模块的methodcaller:一行代码搞定对象方法调用的黑科技
`operator.methodcaller`是Python中处理对象方法调用的高效工具,替代冗长Lambda,提升代码可读性与性能。适用于数据过滤、排序、转换等场景,支持参数传递与链式调用,是函数式编程的隐藏利器。
196 4
|
5月前
|
缓存 供应链 芯片
电子元件类商品 item_get - 商品详情接口深度分析及 Python 实现
电子元件商品接口需精准返回型号参数、规格属性、认证及库存等专业数据,支持供应链管理与采购决策。本文详解其接口特性、数据结构与Python实现方案。
|
6月前
|
安全 JavaScript Java
Python中None与NoneType的真相:从单例对象到类型系统的深度解析
本文通过10个真实场景,深入解析Python中表示“空值”的None与NoneType。从单例模式、函数返回值,到类型注解、性能优化,全面揭示None在语言设计与实际编程中的核心作用,帮助开发者正确高效地处理“无值”状态,写出更健壮、清晰的Python代码。
656 3
|
6月前
|
Python
解决Python中AttributeError:'image'对象缺少属性'read_file'的问题策略。
通过上述策略综合考虑,您将能够定位问题并确定如何解决它。记住,Python社区很庞大,也很乐于帮助解决问题,因此不要害怕在求助时提供尽可能多的上下文和您已经尝试过的解决方案。
186 0
|
10月前
|
Python
解决Python报错:DataFrame对象没有concat属性的多种方法(解决方案汇总)
总的来说,解决“DataFrame对象没有concat属性”的错误的关键是理解concat函数应该如何正确使用,以及Pandas库提供了哪些其他的数据连接方法。希望这些方法能帮助你解决问题。记住,编程就像是解谜游戏,每一个错误都是一个谜题,解决它们需要耐心和细心。
509 15
|
10月前
|
安全 测试技术 开发者
Python中的“空”:对象的判断与比较
在Python开发中,判断对象是否为“空”是常见操作,但其中暗藏诸多细节与误区。本文系统梳理了Python中“空”的判定逻辑,涵盖None类型、空容器、零值及自定义对象的“假值”状态,并对比不同判定方法的适用场景与性能。通过解析常见误区(如混用`==`和`is`、误判合法值等)及进阶技巧(类型安全检查、自定义对象逻辑、抽象基类兼容性等),帮助开发者准确区分各类“空”值,避免逻辑错误,同时优化代码性能与健壮性。掌握这些内容,能让开发者更深刻理解Python的对象模型与业务语义交集,从而选择最适合的判定策略。
404 5
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
660 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
10月前
|
人工智能 Python
[oeasy]python083_类_对象_成员方法_method_函数_function_isinstance
本文介绍了Python中类、对象、成员方法及函数的概念。通过超市商品分类的例子,形象地解释了“类型”的概念,如整型(int)和字符串(str)是两种不同的数据类型。整型对象支持数字求和,字符串对象支持拼接。使用`isinstance`函数可以判断对象是否属于特定类型,例如判断变量是否为整型。此外,还探讨了面向对象编程(OOP)与面向过程编程的区别,并简要介绍了`type`和`help`函数的用法。最后总结指出,不同类型的对象有不同的运算和方法,如字符串有`find`和`index`方法,而整型没有。更多内容可参考文末提供的蓝桥、GitHub和Gitee链接。
261 11
|
11月前
|
存储 C语言 Python
[oeasy]python077_int类型怎么用_整数运算_integer_进制转化_int类
本文主要讲解了Python中`int`类型的应用与特性。首先回顾了`int`词根的溯源,探讨了整型变量的概念及命名规则(如匈牙利命名法)。接着分析了整型变量在内存中的存储位置和地址,并通过`type()`和`id()`函数验证其类型和地址。还介绍了整型变量的运算功能,以及如何通过`int()`函数将字符串转化为整数,支持不同进制间的转换(如二进制转十进制)。此外,文章提及了关键字`del`的使用场景,对比了Python与C语言中`int`的区别,并总结了整型与字符串类型的差异,为后续深入学习奠定基础。
274 1
|
11月前
|
Python
Python 高级编程与实战:深入理解面向对象与并发编程
本文深入探讨Python的高级特性,涵盖面向对象编程(继承、多态、特殊方法、类与实例属性)、异常处理(try-except、finally)和并发编程(多线程、多进程、异步编程)。通过实战项目如聊天服务器和异步文件下载器,帮助读者掌握这些技术,编写更复杂高效的Python程序。

推荐镜像

更多