python进阶之魔术方法详解
目录
- 一、三个内置函数
- 二、双下划线开头和结尾的方法,叫魔术方法。
- 总结
一、三个内置函数
1、@classmethod
–类名.属性名
2、@staticmethod
–类名.属性名
3、@property
–设置只读属性,方法变属性,别人不易篡改,调用:类名(). 属性名
二、双下划线开头和结尾的方法,叫魔术方法。
1、一个类对象,在__init__初始化之前,还有__new__方法,这里要重写__new__方法,要调用父类的new方法,且将new方法创建的对象返回,即object. new(cls),其中cls代表的是类对象本身(MyClass)。否则无返回值运行报错。
2、单例模式
这个__new__方法的应用之一,就是单例模式。
实现思路,蓝色线一个回路。黄色线一个回路。
具体脚本如下。t2实例对象,没有name属性,但是也神奇的输出与t1一致的结果。如此类推,其他也一样,如果把这个. py文件导入其他文件B. py中,在B. py中创建其他实例对象t3,调用这个name属性时就会输出与t1一样的结果。其次,t1、t2、t3的内存地址即id(t1)三个都是一样的。最后,还可以设置其他属性,且之间属性共用。
这个就是单例模式,即实例化一次。(如果多次实例化,设置属性,明显会浪费资源,所以单例模式诞生了。)
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!
相关推荐
-
Python魔术方法专题
_del_ 类的析构方法,它在对象被回收时执行,主要的作用时用来释放资源(内存 文件 进程等) 因为Python内存回收机制,使得Python的del方法的执行时间是不确定的,因此不推荐在Python中使用析构方法. class Bar(object): def __del__(self): print("被回收了! -") a = Bar() a.__del__() # 主动调用是没用的,因为引用计数不为零,并不会回收资源 gc print("已经删除a了") p
-
Python类型转换的魔术方法详解
本文讨论python中将某个复杂对象转换为简单对象或数据类型的常用魔术放啊,这些在编程中是十分有用的. 1.__str__方法. 在讲解本方法前我们先打开一个jupyter notebook,随意创建一个类如下,使用str()方法输出该类的实例看看返回了什么: class BarChart(object): def __init__(self, x, y, labels,color): self.x = x self.y = y self.labels = labels self.color =
-
Python中的__new__与__init__魔术方法理解笔记
很喜欢Python这门语言.在看过语法后学习了Django 这个 Web 开发框架.算是对 Python 有些熟悉了.不过对里面很多东西还是不知道,因为用的少.今天学习了两个魔术方法:__new__ 和 __init__. 开攻: 如果对 Python 有所简单了解的话应该知道它包含类这个概念的.语法如下: 复制代码 代码如下: class ClassName: <statement - 1>: . . . <state
-
Python魔术方法详解
介绍 此教程为我的数篇文章中的一个重点.主题是魔术方法. 什么是魔术方法?他们是面向对象的Python的一切.他们是可以给你的类增加"magic"的特殊方法.他们总是被双下划线所包围(e.g. __init__ 或者 __lt__).然而他们的文档却远没有提供应该有的内容.Python中所有的魔术方法均在Python官方文档中有相应描述,但是对于他们的描述比较混乱而且组织比较松散.很难找到有一个例子(也许他们原本打算的很好,在开始语言参考中有描述很详细,然而随之而来的确是枯燥的语法描述
-
python面向对象基础之常用魔术方法
一.类和对象 通俗理解:类就是模板,对象就是通过模板创造出来的物体 类(Class)由3个部分构成: 类的名称: 类名 类的属性: 一组数据 类的方法: 允许对进行操作的方法 (行为) 二.魔法方法 在python中,有一些内置好的特定的方法,方法名是"__xxx__",在进行特定的操作时会自动被调用,这些方法称之为魔法方法.下面介绍几种常见的魔法方法. 1.__init__方法 :初始化一个 类 ,在创建实例对象为其 赋值 时使用. 2.__str__方法:在将对象转换成字符串 st
-
python进阶之魔术方法详解
目录 一.三个内置函数 二.双下划线开头和结尾的方法,叫魔术方法. 总结 一.三个内置函数 1.@classmethod–类名.属性名 2.@staticmethod–类名.属性名 3.@property–设置只读属性,方法变属性,别人不易篡改,调用:类名(). 属性名 二.双下划线开头和结尾的方法,叫魔术方法. 1.一个类对象,在__init__初始化之前,还有__new__方法,这里要重写__new__方法,要调用父类的new方法,且将new方法创建的对象返回,即object. new(cl
-
Python进阶-函数默认参数(详解)
一.默认参数 python为了简化函数的调用,提供了默认参数机制: def pow(x, n = 2): r = 1 while n > 0: r *= x n -= 1 return r 这样在调用pow函数时,就可以省略最后一个参数不写: print(pow(5)) # output: 25 在定义有默认参数的函数时,需要注意以下: 必选参数必须在前面,默认参数在后: 设置何种参数为默认参数?一般来说,将参数值变化小的设置为默认参数. python标准库实践 python内建函数: prin
-
python生成式的send()方法(详解)
随便在网上找了找,感觉都是讲半天讲不清楚,这里写一下. def generator(): while True: receive=yield 1 print('extra'+str(receive)) g=generator() print(next(g)) print(g.send(111)) print(next(g)) 输出: 1 extra111 1 extraNone 1 为什么会这样呢,点进send就能看到一句话 send:Resumes the generator and "sen
-
Python中格式化format()方法详解
Python中格式化format()方法详解 Python中格式化输出字符串使用format()函数, 字符串即类, 可以使用方法; Python是完全面向对象的语言, 任何东西都是对象; 字符串的参数使用{NUM}进行表示,0, 表示第一个参数,1, 表示第二个参数, 以后顺次递加; 使用":", 指定代表元素需要的操作, 如":.3"小数点三位, ":8"占8个字符空间等; 还可以添加特定的字母, 如: 'b' - 二进制. 将数字以2为基
-
对python函数签名的方法详解
函数签名对象,表示调用函数的方式,即定义了函数的输入和输出. 在Python中,可以使用标准库inspect的一些方法或类,来操作或创建函数签名. 获取函数签名及参数 使用标准库的signature方法,获取函数签名对象:通过函数签名的parameters属性,获取函数参数. # 注意是小写的signature from inspect import signature def foo(value): return value # 获取函数签名 foo_sig = signature(foo)
-
把JSON数据格式转换为Python的类对象方法详解(两种方法)
JOSN字符串转换为自定义类实例对象 有时候我们有这种需求就是把一个JSON字符串转换为一个具体的Python类的实例,比如你接收到这样一个JSON字符串如下: {"Name": "Tom", "Sex": "Male", "BloodType": "A", "Hobbies": ["篮球", "足球"]} 我需要把这个转换为具
-
对python 自定义协议的方法详解
前面说到最近在写python的一些东西,然后和另外一位小伙伴定义了协议,然后昨天我有一部分东西没理解对,昨天上午我自己重写了一遍接收和发送的全部逻辑,昨天下午补了压力测试的脚本,自测没问题之后告知联调的小伙伴. 结果上午还是出了一点问题,然后我们两对代码,他写了一个python的实现.还好最后我这边没问题.(我也害怕是我这边出问题啊,所以我自己的代码都自己检查了好几遍) 简单放一下他的实现: import struct import ctypes class E(Exception): def
-
Python底层封装实现方法详解
这篇文章主要介绍了Python底层封装实现方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 事实上,python封装特性的实现纯属"投机取巧",之所以类对象无法直接调用私有方法和属性,是因为底层实现时,python偷偷改变了它们的名称. python在底层实现时,将它们的名称都偷偷改成了"_类名__属性(方法)名"的格式 class Person: def setname(self, name): if le
-
python集合删除多种方法详解
这篇文章主要介绍了python集合删除多种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 删除指定的元素 A={'a','c','b','d','e'} print("原集合:",A) A.remove('a') # 不存在会报错 print("删除a后:",A) A.discard('b') # 不存在不会报错 print("删除b后:",A) A.pop() print("
随机推荐
- tomcat虚拟主机_动力节点Java学院整理
- Linux下安装Oracle 11g出现prvf-0002错误解决办法
- AutoSave/自动存储功能实现
- Blitz templates 最快的PHP模板引擎
- php cli模式下获取参数的方法
- PHP文件缓存类示例分享
- 详解Python中的正则表达式的用法
- 基于scrapy实现的简单蜘蛛采集程序
- Go语言中的方法定义用法分析
- 用C++实现单向循环链表的解决方法
- c++快速排序详解
- Android开发中ProgressDialog简单用法示例
- 超简单的qps统计方法(推荐)
- 根据status信息对MySQL服务器进行优化
- Bootstrap栅格系统的使用和理解2
- JavaScript中变量的相互引用
- 解决plsql遇到乱码的问题
- Java concurrency集合之 CopyOnWriteArrayList_动力节点Java学院整理
- jquery序列化表单去除指定元素示例代码
- jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解