iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python对象是什么
  • 860
分享到

Python对象是什么

2023-06-02 02:06:25 860人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要讲解了“python对象是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python对象是什么”吧!类和对象的概念类是对我们要处理的客观事物的抽象。类用来描述具有相同的属性和

这篇文章主要讲解了“python对象是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python对象是什么”吧!

类和对象的概念

类是对我们要处理的客观事物的抽象。类用来描述具有相同的属性和方法的对象的集合,它定义了该集合中每个对象所共有的属性和方法。对象是类在内存的实例,一个类可以实例化为多个对象。类是抽象的,不占用内存,而对象是具体的,占用存储空间。

类的成员

作为Python初学者,大可不必把精力花费在令人费解的概念上,只需要掌握使用类的基本要素就可以了。未来的日子里,你有足够多的时间慢慢体会OOP的博大精深。随着经验的积累,OOP会自然而然地成为你的思维工具

下面的代码,定义了一个名为A的类。所有的类,都有构造函数和析构函数,此外,还可以包含成员函数和成员变量。我喜欢把成员函数叫做类的方法,把成员变量叫做类的属性。

当类被实例化为对象时,首先执行构造函数,当对象被销毁时,会自动执行析构函数。一般的,我们会在构造函数中进行初始化工作,在析构函数中进行清理工作。

读到这里,有很多初学者一定会说:我定义类的时候,写过构造函数,但从没有写过析构函数,你为什么说所有的类都有构造函数和析构函数呢?没错,定义类的时候,即便我们不写构造函数和析构函数,这两个方法也照样存在(析构函数稍微有点特殊,我们不能直接看到它——除非是我们自己定义的)。如果我们自己定义了构造函数和析构函数,则将会取代系统自动赋予的这两个函数。下面的例子清晰地说明了其中的奥秘:类A既没有构造函数,也没有析构函数,类B只有析构函数,两个类都可以生成类实例,也都可以销毁,且 del b 时首先调用了自定义的析构函数。

新式类和旧式类

在PY2中,类有新式类和旧式类两种。新式类需要继承自虚类Object,旧式类则不需要。PY2中类的写法有三种:

在PY3中,只有新式类,不再支持旧式类。你如果习惯继承Object的写法,也完全没有问题。上面三种写法在PY3中都被解释成新式类。新式类和旧式类的主要区别是:

  • 新式类可以继承Object的构造函数和析构函数,如果类的构造和析构函数没有特别的工作,可以省略。而旧式类则不能:

此时用PY2运行,会出现错误:AttributeError: class A has no attribute '__init__',使用PY3不会出现此错误。若改成新式类写法:

仍然用PY2运行,则都不会出错。

  • 新式类可以使用super:

  • 多重继承时,各父类的初始化和函数查找顺序不同:旧式类为深度优先继承,新式类为广度优先继承。

静态变量和实例变量

在构造函数中定义的变量,我们称之为实例变量。实例变量只能在实例化后使用<对象名.变量名>的方式访问。静态变量一般定义在类的开始位置,独立于构造函数之外。静态变量既可以<对象名.变量名>的方式访问,也可以<类名.变量名>的方式访问。通常,类的静态变量一般用于保存类的静态属性,该属性可被类的方法使用,但不应该被类的方法修改。

静态函数

与其他语音的静态函数不同,Python的静态函数有两种,都是用装饰器实现的:

Staticmethod 函数不能使用Self参数,因此不成访问任何成员变量,只能通过类名访问类的静态变量。

ClaSSMethod 函数也不能使用Self参数,因此不成访问任何成员变量,但它有cls参数。cls参数不是对象的引用,而是类的引用,可以通过cls参数访问类的静态变量。

面向对象三要素

面向对象,有三大要素:继承、封装、多态。这里面概念非常多,往往越讲越糊涂。为了不至于误导读者,我尽可能不做解释,只给出例子,请自行揣摩。

(1) 继承

如果派生类只有一个父类,就是单继承。这是最常见的类定义形式。

如果派生类有多个父类,就是多继承。

不管是单继承还是多继承,都可以在派生类中重写父类的函数——这叫做覆盖。

(2) 封装

所谓封装,就是将类的成员变量、成员函数整合在一起,并对关键的信息进行保护或隐藏。信息保护或隐藏有三个级别:公有、保护、私有。如果你有c++的使用经验,我们先来回顾一下C++的信息隐藏规则:

  1. 公有成员:对类外部的任何代码可见;

  2. 保护成员:对类外部的任何代码都不可见,但对派生类可见;

  3. 私有成员:对类外部及派生类都不可见。

对应这三个级别,Python 是这样定义的:

  1. 以英文字母开头的成员为公有成员

  2. 以一个下划线开头的成员为保护成员

  3. 以两个下划线开关的成员为私有成员

下面我们试试 Python 的信息保护或隐藏规则是否有效。

试试访问公有成员:

公有成员访问规则与C++相同。先跳过保护成员,看看私有成员:

私有成员的访问规则也与C++相同。那我为什么跳过保护成员了?来试试吧:

看到这里就已经不对了,应该只有类内部的代码和派生类能使用啊,怎么可以直接用了呢?是的,Python的保护成员访问规则与C++的确实不一样。那 Python 的保护成员是什么样的机制呢?原来,在 Python 的OOP中,保护成员公有成员没有任何区别。保护规则仅适用于 from xxx import * 这一种情况。

testA.py

class A(object): passclass _B(object): pass

testB.py

from testA import *a = A()b = _B()

执行testB.py时:

Traceback (most recent call last): File "testB.py", line 4, inb = _B()NameError: name '_B' is not defined

此时,保护成员_B被保护了。但这种情况仅适用于from xxx import *这一种情况。如果testB.py这样写:

testB.py

from testA import A, _Ba = A()b = _B()

或者:

import testAa = testA.A()b = testA._B()

则是没有任何问题的。

(3) 多态

当父类有多个派生类,且派生类都实现了同一个成员函数,则可以实现多态:

class H2O(object): def what(self): print("I am H2O")class Water(H2O): def what(self): print("I am water")class Ice(H2O): def what(self): print("I am ice")class WaterVapor(H2O): def what(self): print("I am water vapor");def what(obj): obj.what()objs = [H2O(), Water(), Ice(), WaterVapor()]for obj in objs: what(obj)

抽象类

抽象类不能被实例化,只能作为父类被其它类继承,且派生类必须实现抽象类中所有的成员函数。抽象类应用场景是什么呢?我曾经做过很多下载数据的脚本插件,不同的数据源使用不同的脚本,所有这些脚本要求必须有名字相同的方法,此时,抽象类就派上用场了。

单例模式

单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时(如软件配置类,无论在软件的什么地方实例化,永远都是那一个对象),单例模式就能派上用场。比如,Python 日志模块中的日志对象,或者异步通讯框架Twisted 里面的反应堆(Reactor),都是典型的单例模式——尽管它们不一定是下面这种方法实现的。

Python可以使用装饰器的方法使用单例模式:

>>> import abc>>> class A(object, metaclass=abc.ABCMeta): @abc.abstractmethod def a(self): pass @abc.abstractmethod def b(self): pass>>> class C(A): def a(self): print("a")>>> c = C()Traceback (most recent call last): File "", line 1, inc = C()TypeError: Can't instantiate abstract class C with abstract methods b

感谢各位的阅读,以上就是“Python对象是什么”的内容了,经过本文的学习后,相信大家对Python对象是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Python对象是什么

本文链接: https://www.lsjlt.com/news/228472.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python对象是什么
    这篇文章主要讲解了“Python对象是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python对象是什么”吧!类和对象的概念类是对我们要处理的客观事物的抽象。类用来描述具有相同的属性和...
    99+
    2023-06-02
  • Python的对象模型是什么
    在面向对象的理论中,有两个核心的概念:类和实例。类可以看成是一个模板,实例就是根据这个模板创建出来的对象。在Python中,类和实例都被视为对象,即类对象(或类型对象)和实例对象。为了避免后续出现歧义,我们这里把对象分为三种:内置类对象:比...
    99+
    2023-05-18
    Python
  • python中什么是对象方法
    python中什么是对象方法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,P...
    99+
    2023-06-14
  • Python中,什么是面向对象?
    面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用。 类就是一个模板,模板里可以包含多个函数,函数里实现一些功能 对象则是根据模板创建的实...
    99+
    2023-01-31
    面向对象 Python
  • 什么是XMLHttpRequest对象
    这篇文章主要讲解了“什么是XMLHttpRequest对象”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“什么是XMLHttpRequest对象”吧!&nbs...
    99+
    2024-04-02
  • 什么是JavaScript对象
    这篇文章主要介绍“什么是JavaScript对象”,在日常操作中,相信很多人在什么是JavaScript对象问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是JavaScr...
    99+
    2024-04-02
  • Date对象是什么
    这篇文章给大家介绍Date对象是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。  类型使用自 UTC(Coordinated Universal Time,国际协调时间)1970 年 1 月 1 日午夜(零时)开始...
    99+
    2023-06-05
  • javascript对象是什么
    本篇内容介绍了“javascript对象是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • php对象是什么
    本篇内容介绍了“php对象是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php中的对象是一个由信息及对信息进行处理的描述所组成的整体,...
    99+
    2023-06-21
  • JavaString对象是什么
    这篇文章将为大家详细讲解有关JavaString对象是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java String 对象,你真的了解了吗&nbs...
    99+
    2024-04-02
  • 什么是response对象
    Response对象是在Web开发中经常使用的一个对象,它代表着服务器对客户端请求的响应。当客户端向服务器发送一个请求后,服务器会生...
    99+
    2023-08-29
    response
  • Python全栈中的JS对象是什么
    这篇文章主要为大家分析了Python全栈中的JS对象是什么的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“Python全栈中的JS对象是什么”的知识吧。1. ...
    99+
    2023-06-28
  • python对象和类的关系是什么
    在Python中,类是对象的蓝图或模板。对象是类的实例化,即通过类创建的具体实体。类定义了对象的属性(变量)和行为(方法)。它可以看...
    99+
    2023-08-14
    python
  • 什么是 Python 索引对象 IDE?有什么好处?
    Python 索引对象 IDE 是一种专门为 Python 开发者设计的集成开发环境。它可以帮助开发者提高编码效率、减少出错率,并且具有优秀的可扩展性和灵活性。本文将介绍 Python 索引对象 IDE 的相关知识和优点。 一、Python...
    99+
    2023-10-20
    索引 对象 ide
  • ADO Connection对象是什么
    这篇文章主要讲解了“ADO Connection对象是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ADO Connection对象是什么”吧!ADO Connection对象表示数据源...
    99+
    2023-06-17
  • 什么是变量对象
    这篇文章主要介绍“什么是变量对象”,在日常操作中,相信很多人在什么是变量对象问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是变量对象”的疑惑有所帮助!接下来,请跟着小编一...
    99+
    2024-04-02
  • java中什么是对象
    本篇文章为大家展示了java中什么是对象,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4. 网...
    99+
    2023-06-14
  • python中面向对象的概念是什么
    面向对象的概念是一种编程范式,它将数据和操作数据的方法打包在一起,形成对象。对象是类的实例,类是用来描述相似对象的模板。面向对象的编...
    99+
    2023-10-12
    python
  • c++中什么是类,什么是对象
    c++kquote>类在 c++ 中代表对象集合的模板,定义了对象的属性(数据成员)和行为(成员函数)。对象是类的实例,拥有类中的所有数据成员和成员函数,由类创建,并使用与类相同的...
    99+
    2024-05-08
    c++
  • WCF Stream对象是什么
    本篇内容介绍了“WCF Stream对象是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!由于Stream操作受到绑定的限制,只能使用Ba...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作