返回顶部
首页 > 资讯 > 后端开发 > Python >Python中的高阶概念属性知识点有哪些
  • 767
分享到

Python中的高阶概念属性知识点有哪些

2023-06-16 03:06:07 767人浏览 薄情痞子

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

摘要

本篇内容主要讲解“python中的高阶概念属性知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python中的高阶概念属性知识点有哪些”吧!1.类属性为了更好地管理项目中的数据,我们经

本篇内容主要讲解“python中的高阶概念属性知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习Python中的高阶概念属性知识点有哪些”吧!

1.类属性

为了更好地管理项目中的数据,我们经常需要创建自定义类。在Python中,类也是对象,这意味着它们可以有自己的属性。让我们看一个例子。

>>> class Dog: ...     genus = "Canis" ...     family = "Canidae" ...>>> Dog.genus'Canis' >>> Dog.family'Canidae' >>> dir(Dog)['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__fORMat__',   '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__',   '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',   '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__',   'family', 'genus']

如上所示,我们声明了一个名为Dog的类。因为所有的狗都属于犬类属和犬科家族,所以我们创建了两个类属性,分别命名为属和科来存储这两条信息。如您所见,我们可以直接使用类来访问这些属性。我们可以使用函数dir来显示狗的属性列表,其中包括家族和属。

这些定义为类级别的属性称为类属性,类可以直接检索它们。但是,与其他OOP语言不同,Python中的实例对象也可以直接访问这些类属性,如下面的代码片段所示。

>>> Dog().genus 'Canis' '>>> Dog().family 'Canidae'

2.实例属性

通过自定义类,我们还可以为实例对象设置属性。这些属性称为实例属性,这意味着它们是特定于实例的数据。让我们继续狗类。

>>> class Dog: ...     genus = "Canis" ...     family = "Canidae" ......     def __init__(self, breed, name): ...         self.breed = breed...         self.name = name...

在上面的代码中,我们定义了__init__函数,它将作为创建一个新的Dog实例的构造方法。第一个参数self引用了我们正在创建的实例。在实例化期间(即创建新实例),我们将为新实例对象分配品种和名称信息,这些属性将成为实例特征的一部分,如下所示。

>>> dog = Dog("Rottweiler", "Ada") >>> dog.name'Ada' >>> dog.breed'Rottweiler'

需要注意的一点是,我们可以为具有与class属性相同的属性的实例赋值。在这种情况下,当您检索实例的这个属性时,将不会检索class属性。换句话说,当您使用一个实例对象来检索class属性时,Python将首先检查实例本身是否有一个用相同名称设置的属性。如果没有,Python将使用class属性作为回退。此外,设置一个实例的属性不会影响同名类的属性。让我们在下面的代码片段中看看这些特征。

>>> dog.genus = "Felis" >>> dog.genus'Felis' >>> Dog('Poodle', 'Cutie').genus 'Canis'

3.函数作为属性

在Python中,一切都是对象,前面我已经提到类是对象。此外,函数是Python对象。在类中,我们可以定义函数,通常称为方法。根据使用这些函数的方式,我们可以将它们进一步分类为类方法、静态方法和实例方法。在这里,理解这些差异并不是必须的。

尽管某些OOP语言将属性(或属性)和函数视为不同的实体,但Python将这些方法(函数)视为类的属性——与我们前面定义的类属性没有太大区别。让我们用上面提到的三种方法来更新Dog类:类方法、静态方法和实例方法,如下所示。

>>> class Dog: ...     genus = "Canis" ...     family = "Canidae" ......     def __init__(self, breed, name): ...         self.breed = breed...         self.name = name......     @claSSMethod...     def from_tag(cls, tag_info): ...         breed = tag_info["breed"] ...         name = tag_info["name"] ...         return cls(breed, name) ......     @staticmethod...     def can_bark(): ...         print("Yes. All dogs can bark.") ......     def bark(self): ...         print("The dog is barking.") ...

对于更新后的类,我们可以使用函数dir检查类的属性列表。如下所示,类方法和静态方法都包含在列表中。

>>> dir(Dog) ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__',  '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__',  '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',  '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__',  'bark', 'can_bark', 'family', 'from_tag', 'genus']

然而,有一件事可能会让一些人感到惊讶,那就是该列表中包含了实例方法bark。我们知道,实例方法是那些由实例对象调用的函数,因此有些人可能认为这些实例方法应该绑定到所有单独的实例。然而,在Python中却不是这样。在解释实例方法如何工作之前,让我们先看看下面的代码。

>>> dog = Dog("Rottweiler", "Ada") >>> dog.bark()The dog is barking. >>> Dog.bark(dog)The dog is barking.

如上所示,我们首先创建了Dog类的一个实例。与其他OOP语言一样,实例对象可以直接调用实例方法bark。然而,Python与其他语言的不同之处在于,实例方法的调用是通过类来操作的,通过传递实例作为参数来调用定义的函数(即,dog  .bark(dog))。换句话说,instance.inst_method()在本质上与Python中的Class.inst_method(instance)相同。

之所以可以这样做,是因为Dog类“拥有”实例方法,这是一种节省内存的机制,因为Python不需要为每个实例对象创建单独的函数副本。相反,当一个实例调用一个实例方法时,Python将调用委托给类,该类将通过传递实例调用相应的函数(它将被设置为已定义函数中的self参数)。

4.私有属性

如果您有OOP的经验,就不应该不熟悉访问修饰符的存在,比如public、private和protected。这些修饰符限制了可以访问修改的属性和函数的范围。然而,您很少在Python中听到这样的讨论。实际上,如果借用OOP中的术语,所有Python属性都是公共的。如上所示,在类和实例可以访问的地方,类和实例属性都可以自由访问。因此,严格地说,Python中没有真正的私有或受保护的属性(后面将讨论)。我们只是类比地使用这些术语,以便来自其他OOP背景的程序员更容易理解相关的编码约定(是的,只是一种约定,没有作为真正的访问控制加以加强)。

让我们首先讨论一下如何在Python中定义“私有”属性。惯例是用两个前导下划线命名这些属性,并且不超过一个后引下划线。考虑下面更新过的Dog类的示例—为了简单起见,我们省略了前面定义的其他属性。

>>> class Dog: ...     def __init__(self, breed, name): ...         self.breed = breed...         self.name = name...         self.__tag = f"{name} | {breed}" ... >>> dog = Dog("Rottweiler", "Ada") >>> dog.name'Ada' >>> dog.__tagTraceback (most recent call last):  File "<stdin>", line 1, in <module> AttributeError: 'Dog' object has no attribute '__tag'

在上面的更新之后,Dog实例将拥有一个名为tag的私有属性,正如其名称所示。实例对象仍然可以像以前一样访问它的其他属性(例如,名称)。然而,实例不能访问私有属性剩余的标记,这可能是我们所期望的。实际上,这种对访问这些属性的限制正是它们被称为“私有”属性的原因。但它是怎么发生的,在引擎盖下?毕竟,我前面提到过,所有Python属性在默认情况下都是公共的。下面将向您展示Python如何实现“私有”属性。

>>> dog.__dict__ {'breed': 'Rottweiler', 'name': 'Ada', '_Dog__tag': 'Ada | Rottweiler'} >>> dog._Dog__tag'Ada | Rottweiler'

__dict__特殊方法(也称为dunder方法,在名称前后都有双下划线)能够显示对象的字典表示。具体来说,字典中的键-值对是对象的属性及其值。正如我们所看到的,除了bread和name属性之外,还有一个名为_dog__tag标记的属性。这个属性正是私有属性__tag通过一个称为mangling的过程与对象关联的方式。

具体来说,mangling或name  mangling是使用_ClassName作为私有属性的前缀,这样我们就人为地创建了对这些“私有”属性的访问限制。但是,如果我们确实想检索任何私有属性,我们仍然可以使用被破坏的名称访问它,就像我们在代码片段中使用_dog__标记所做的那样。

5.受保护的属性

在上一节中,我们讨论了私有属性,但是受保护的属性呢?Python中与受保护属性对应的属性名称只有一个下划线。不像双下划线会导致混乱,单下划线前缀不会改变Python解释器处理这些属性的方式&mdash;&mdash;它只是Python编程世界的一个惯例,表示他们(例如,编码器)不希望你访问这些属性。但是,如果你坚持要访问它们,你仍然可以这样做。让我们看看下面的代码。

>>> class Dog: ...     def __init__(self, breed, name): ...         self.breed = breed...         self.name = name...         self.__tag = f"{name} | {breed}" ...         self._nickname = name[0]

我们通过创建一个名为_nickname的实例属性来更新类Dog。正如其名称使用下划线前缀所表明的那样,按照约定,它被认为是一个“受保护”的属性。我们仍然可以将这些受保护的属性作为其他“公共”属性来访问,但是一些ide或Python编辑器不会为这些非公共属性提供提示(例如,自动完成提示)。有关这些使用Jupyter笔记本的例子,请参见屏幕截图。

Python中的高阶概念属性知识点有哪些

如果我们使用模块而不是类,就像我们在这里所做的那样,当我们使用from _module import  *导入模块时,带有下划线前缀的名称将不会被导入,从而提供了一种机制来限制对这些“受保护的”属性的访问。

到此,相信大家对“Python中的高阶概念属性知识点有哪些”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Python中的高阶概念属性知识点有哪些

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

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

猜你喜欢
  • Python中的高阶概念属性知识点有哪些
    本篇内容主要讲解“Python中的高阶概念属性知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python中的高阶概念属性知识点有哪些”吧!1.类属性为了更好地管理项目中的数据,我们经...
    99+
    2023-06-16
  • javascript DOM节点属性知识点有哪些
    这篇文章主要介绍了javascript DOM节点属性知识点有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇javascript DOM节点属性知识点有哪些文章都会有所收获...
    99+
    2024-04-02
  • HTML常用的属性知识点有哪些
    这篇文章将为大家详细讲解有关HTML常用的属性知识点有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 定义: HTML属性:HTML元素提供的附加信息 简单的理...
    99+
    2024-04-02
  • R语言属性知识点有哪些
    这篇文章主要介绍了R语言属性知识点有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。属性(attribute):R中对象具备的特性特性描述了所代表的内容以及R解释该对象的方...
    99+
    2023-06-14
  • MYSQL进阶知识点有哪些
    这篇文章主要介绍MYSQL进阶知识点有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!文章目录1 前言1.1 数据库架构1.2 监控信息2 影响数据库的因素2.6.1 什么是事务2...
    99+
    2024-04-02
  • Python中的pandas知识点有哪些
    本篇内容主要讲解“Python中的pandas知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python中的pandas知识点有哪些”吧!前言pandas 是基于 Numpy 的一种...
    99+
    2023-06-27
  • Python中的PEP知识点有哪些
    本篇内容介绍了“Python中的PEP知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!PEP是什么?PEP的全称是Python E...
    99+
    2023-06-02
  • Python Pandas的知识点有哪些
    本篇内容介绍了“Python Pandas的知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!为什么要学习Pandas那么问题来了:...
    99+
    2023-06-30
  • python中函数知识点有哪些
    这篇文章主要介绍python中函数知识点有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!函数参数的两大分类形式参数函数定义阶段括号所写的参数实际参数函数调用阶段括号内传入的参数形参与实参的关系可以将形参看成是变量...
    99+
    2023-06-25
  • Vuejs的进阶知识有哪些
    本篇文章给大家分享的是有关Vuejs的进阶知识有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。对大部分人来说,掌握Vue.js基本的几个A...
    99+
    2024-04-02
  • 大数据之MYSQL进阶的知识点有哪些
    这篇文章主要介绍了大数据之MYSQL进阶的知识点有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。文章目录5 MySQL体系结构5.6.1...
    99+
    2024-04-02
  • python框架中flask的知识点有哪些
    小编给大家分享一下python框架中flask的知识点有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、Flask蓝图目录我们之前写的Flask项目都是自己组织的目录结构,其实Flask官方有其推荐的目录结构,以下就...
    99+
    2023-06-15
  • Python中的装饰器知识点有哪些
    这篇文章主要介绍“Python中的装饰器知识点有哪些”,在日常操作中,相信很多人在Python中的装饰器知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中的装饰器知识点有哪些”的疑惑有所...
    99+
    2023-07-02
  • Python编码的知识点有哪些
    这篇文章主要介绍“Python编码的知识点有哪些”,在日常操作中,相信很多人在Python编码的知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python编码的知识点有哪些”的疑惑有所帮助!接下来...
    99+
    2023-06-16
  • Python的基础知识点有哪些
    本篇内容介绍了“Python的基础知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!python简介python是一种面向对象的解释...
    99+
    2023-06-02
  • Python的Cookie知识点有哪些呢
    这期内容当中小编将会给大家带来有关Python的Cookie知识点有哪些呢,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。相信很多同学肯定听过Cookie这个东西,也大概了解其作用,但是其原理以及如何设置,...
    99+
    2023-06-02
  • Python列表的知识点有哪些
    本篇内容主要讲解“Python列表的知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python列表的知识点有哪些”吧!一、列表的创建方式# -*- coding:...
    99+
    2023-06-02
  • Python基本知识点有哪些
    本篇内容主要讲解“Python基本知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python基本知识点有哪些”吧!Python注释python中单行注释采用 # 开头。python ...
    99+
    2023-06-29
  • Python基础知识点有哪些
    本篇内容主要讲解“Python基础知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python基础知识点有哪些”吧!Python程序文件结构程序→模块→语句→表达式Python的关键要...
    99+
    2023-06-02
  • python端口知识点有哪些
    本篇内容介绍了“python端口知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 什么是端口端口就好一个房子的门,是出入这间房...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作