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)三个都是一样的。最后,还可以设置其他属性,且之间属性共用。

这个就是单例模式,即实例化一次。(如果多次实例化,设置属性,明显会浪费资源,所以单例模式诞生了。)

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

时间: 2022-01-13

Python魔术方法详解

介绍 此教程为我的数篇文章中的一个重点.主题是魔术方法. 什么是魔术方法?他们是面向对象的Python的一切.他们是可以给你的类增加"magic"的特殊方法.他们总是被双下划线所包围(e.g. __init__ 或者 __lt__).然而他们的文档却远没有提供应该有的内容.Python中所有的魔术方法均在Python官方文档中有相应描述,但是对于他们的描述比较混乱而且组织比较松散.很难找到有一个例子(也许他们原本打算的很好,在开始语言参考中有描述很详细,然而随之而来的确是枯燥的语法描述

python面向对象基础之常用魔术方法

一.类和对象 通俗理解:类就是模板,对象就是通过模板创造出来的物体 类(Class)由3个部分构成: 类的名称: 类名 类的属性: 一组数据 类的方法: 允许对进行操作的方法 (行为) 二.魔法方法 在python中,有一些内置好的特定的方法,方法名是"__xxx__",在进行特定的操作时会自动被调用,这些方法称之为魔法方法.下面介绍几种常见的魔法方法. 1.__init__方法 :初始化一个 类 ,在创建实例对象为其 赋值 时使用. 2.__str__方法:在将对象转换成字符串 st

Python中的__new__与__init__魔术方法理解笔记

很喜欢Python这门语言.在看过语法后学习了Django 这个 Web 开发框架.算是对 Python 有些熟悉了.不过对里面很多东西还是不知道,因为用的少.今天学习了两个魔术方法:__new__ 和 __init__. 开攻: 如果对 Python 有所简单了解的话应该知道它包含类这个概念的.语法如下: 复制代码 代码如下: class ClassName:     <statement - 1>:         .         .           .     <state

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魔术方法专题

_del_ 类的析构方法,它在对象被回收时执行,主要的作用时用来释放资源(内存 文件 进程等) 因为Python内存回收机制,使得Python的del方法的执行时间是不确定的,因此不推荐在Python中使用析构方法. class Bar(object): def __del__(self): print("被回收了! -") a = Bar() a.__del__() # 主动调用是没用的,因为引用计数不为零,并不会回收资源 gc print("已经删除a了") p

Python加密方法小结【md5,base64,sha1】

本文实例总结了python加密方法.分享给大家供大家参考,具体如下: MD5加密: def md5(str): import hashlib m = hashlib.md5() m.update(str) return m.hexdigest() base64加密: import base64 s = '我是字符串' a = base64.b64encode(s) print a print base64.b64decode(a) 输出结果: ztLKx9fWt/u0rg== 我是字符串 sha

Yii框架使用魔术方法实现跨文件调用功能示例

本文实例讲述了Yii框架使用魔术方法实现跨文件调用.分享给大家供大家参考,具体如下: 目前项目用yii框架,controller调用facade的方法,facade调用adapter的方法,adapter调用api的方法,api封装了sql方法,但是大部分情况下,只是单纯的调用,但限于目前项目的规则,都要写方法,而方法都是单纯的return,于是写了个demo,模拟了下. <?php class aApi { public static function tt1($name, $age) { p

json跨域调用python的方法详解

本文实例讲述了json跨域调用python的方法.分享给大家供大家参考,具体如下: 客户端: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">

php魔术方法功能与用法实例分析

本文实例讲述了php魔术方法功能与用法.分享给大家供大家参考,具体如下: <?php //php中的魔术方法 header('content-type:text/html;charset=utf-8'); class Person{ public $name; protected $sex; private $salary; //构造方法,实例化对象是自动触发的方法 public function __construct($name,$sex,$salary){ $this->name=$na

动态规划之矩阵连乘问题Python实现方法

本文实例讲述了动态规划之矩阵连乘问题Python实现方法.分享给大家供大家参考,具体如下: 给定n个矩阵{A1,A2,-,An},其中Ai与Ai+1是可乘的,i=1,2 ,-,n-1.如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少. 例如: A1={30x35} ; A2={35x15} ;A3={15x5} ;A4={5x10} ;A5={10x20} ;A6={20x25} ; 结果为:((A1(A2A3))((A4A5)A6))  最小的乘次为15125.

PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法分析

本文实例讲述了PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法.分享给大家供大家参考,具体如下: 1.对象克隆 clone PHP4面向对象功能一个很大的缺点,是将对象视为另一种数据类型,这使得很多常见的OOP方法无法使用,如设计模式.这些方法依赖于将对象作为引用传递给其他类方法,而不是作为值传递,而按值传递却是PHP的默认做法.幸好,PHP5解决了这个问题,现在所有对象在默认情况下都被视为引用.但是,由于所有对象都被视为引用而不是值,所以现在复制对象更为困难.如果尝试

决策树剪枝算法的python实现方法详解

本文实例讲述了决策树剪枝算法的python实现方法.分享给大家供大家参考,具体如下: 决策树是一种依托决策而建立起来的一种树.在机器学习中,决策树是一种预测模型,代表的是一种对象属性与对象值之间的一种映射关系,每一个节点代表某个对象,树中的每一个分叉路径代表某个可能的属性值,而每一个叶子节点则对应从根节点到该叶子节点所经历的路径所表示的对象的值.决策树仅有单一输出,如果有多个输出,可以分别建立独立的决策树以处理不同的输出. ID3算法:ID3算法是决策树的一种,是基于奥卡姆剃刀原理的,即用尽量用