1,构造和析构

1,

  • open(filename,'r+')   r+为可读写两种操作
  • 写一个 FileObject 类,给文件对象进行包装,从而确认在删除对象时文件能自动关闭

class fileobject:def __init__(self,filename='example.txt'):self.new_file=open(filename,'r+')def __del__(self):self.new_file.close()del self.new_file

2,

  • 定义一个类实现摄氏度到华氏度的转换(转换公式:华氏度 = 摄氏度*1.8+32)
class C2F(float):def __new__(cls,age=0.0):return float.__new__(cls,age*1.8+32)

3,

  • ord()函数主要用来返回对应字符的ascii码
  • 当传入的参数是字符串的时候,返回该字符串中所有字符的 ASCII 码的和(使用 ord() 获得一个字符的 ASCII 码值)
class Nint(int):def __new__(cls,age=0):if isinstance(age,str):total=0for each in age:total+=ord(each)age=totalreturn int.__new__(cls,age)

2,算术运算

  • 工厂函数,其实就是一个类对象。当你调用他们的时候事实上就是创建一个相应的实例对象
  • 类的属性名和方法名绝对不能相同
  • 鸭子类型:关注点在于对象的行为能做什么,而不是关注对象所属的类型。          in_the_forest() 函数对参数 duck 只有一个要求:就是可以实现 quack() 和 feathers() 方法。然而 Duck 类和 Person 类都实现了 quack() 和 feathers() 方法,因此它们的实例对象 donald 和 john 都可以用作 in_the_forest() 的参数。这就是鸭子类型。
# I love FishC.com!
class Duck:def quack(self): print("呱呱呱!")def feathers(self): print("这个鸭子拥有灰白灰白的羽毛。")class Person:def quack(self):print("你才是鸭子你们全家人是鸭子!")def feathers(self): print("这个人穿着一件鸭绒大衣。")def in_the_forest(duck):duck.quack()duck.feathers()def game():donald = Duck()john = Person()in_the_forest(donald)in_the_forest(john)

>>>game()
呱呱呱!
这个鸭子拥有灰白灰白的羽毛。
你才是鸭子你们全家人是鸭子!
这个人穿着一件鸭绒大衣。

这里我有个疑问,给类写方法时必须加上self函数,而方法函数中的变量名前有的加了self,有的没加。这里一位师傅的文章写的很清晰--->Python类和对象的self

  • 我们都知道在 Python 中,两个字符串相加会自动拼接字符串,但遗憾的是两个字符串相减却抛出异常。因此,现在我们要求定义一个 Nstr 类,支持字符串的相减操作:A – B,从 A 中去除所有 B 的子字符串,如下
>>> a = Nstr('I love FishC.com!iiiiiiii')
>>> b = Nstr('i')
>>> a - b
'I love FshC.com!'

class Nstr(str):
    def __sub__(self,other):
        return self.replace(other,'')#''替换走other
    #记得前面的self.replace里的self,是Nstr类自己的属性变量

  •  移位操作符是应用于二进制操作数的,现在需要你定义一个新的类 Nstr,也支持移位操作符的运算:
>>> a = Nstr('I love FishC.com!')
>>> a << 3
'ove FishC.com!I l'
>>> a >> 3
'om!I love FishC.c'

class Nstr(str):
    def __lshift__(self, other):
        return self[other:] + self[:other]

// << __lshift__      >>__rshift__

def __rshift__(self, other):
        return self[-other:] + self[:-other]

  •  定义一个类 Nstr,当该类的实例对象间发生的加、减、乘、除运算时,将该对象的所有字符串的 ASCII 码之和进行计算

>>> a = Nstr('FishC')
>>> b = Nstr('love')
>>> a + b
899
>>> a - b
23
>>> a * b
201918
>>> a / b
1.052511415525114
>>> a // b
1

class Nstr:def __init__(self,arg=''):#定义空字符串if isinstance(arg,str):self.total=0for each in arg:self.total+=ord(each)#转换成ASCII码else:print("参数错误")def __add__(self,other):return self.total+other.total #self,other两个参数def __sub__(self,other):return self.total-other.totaldef __mul__(self,other):return self.total*other.totaldef __truediv__(self,other):return self.total/other.totaldef __floordiv__(self,other):return self.total//other.total
  • python什么时候会用到反运算魔法方法 ?例如 a + b,如果 a 对象的 __add__ 方法没有实现或者不支持相应的操作,那么 Python 就会自动调用 b 的 __radd__ 方法。
class Nint(int):def __radd__(self, other):print("__radd__ 被调用了!")return int.__add__(self, other)

>>> a = Nint(5)
>>> b = Nint(3)
>>> a + b
8
>>> 1 + b
__radd__ 被调用了!
4

不断更新~

python魔法方法1相关推荐

  1. python 魔法方法常用_Python魔法方法指南

    有很多人说学习Python基础之后不知道干什么,不管你是从w3c还是从廖雪峰的教程学习的,这些教程都有一个特点:只能引你快速入门,但是有关于Python的很多基础内容这些教程中都没介绍,而这些你没学习 ...

  2. python魔法方法长文详解

    python魔法方法详解 1. 什么是魔法方法 魔法方式(Magic methods)是python的内置函数,一般以双下划线开头和结尾,比如__add__,__new__等.每个魔法方法都有对应的一 ...

  3. Python 魔法方法详解

    什么是Python魔法方法 魔法方法就如同它的名字一样神奇,总能在你需要的时候为你提供某种方法来让你的想法实现.魔法方法是指Python内部已经包含的,被双下划线所包围的方法,这些方法在进行特定的操作 ...

  4. python 魔法方法诠释

    什么是Python魔法方法 什么是魔法方法呢?它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加"魔法"的特殊方法. 它们经常是两个下划线包围来命名的(比如 ini ...

  5. Python魔法方法

    文章目录 Python魔法方法 一. 概述 1. 魔法方法 2. 常用的魔法方法 二. 构造方法 1. `__new__` 2. `__init__` 3. `__del__` 三. 操作符 1. 简 ...

  6. Python魔法方法指南

    转自:http://pyzh.readthedocs.io/en/latest/python-magic-methods-guide.html 原文: http://www.rafekettler.c ...

  7. python魔法方法是什么_Python魔法方法指南(基础)

    什么是魔法方法呢?它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加"魔法"的特殊方法. 它们经常是两个下划线包围来命名的(比如__init__ ,__lt__ ) ...

  8. python魔法方法学不懂_Python进阶:Python魔法方法

    密圈内有好几个同学问我:学习完了Python基础之后,学些什么呢? 看到这个问题之后,我没在考虑学习基础之后学什么,而我在想真的学完了吗?想以前我也是对着w3c对着廖雪峰的网上教程学习了一遍Pytho ...

  9. python魔法方法_Python魔法方法指南

    有很多人说学习Python基础之后不知道干什么,不管你是从w3c还是从廖雪峰的教程学习的,这些教程都有一个特点:只能引你快速入门,但是有关于Python的很多基础内容这些教程中都没介绍,而这些你没学习 ...

  10. python魔法方法_python,魔法方法指南

    1.简介 本指南归纳于我的几个月的博客,主题是 魔法方法 . 什么是魔法方法呢?它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加"魔法"的特殊方法. 它们经常是两 ...

最新文章

  1. 《OpenCV3编程入门》学习笔记7 图像变换(五 )直方图均衡化
  2. OpenLayers 动态添加标记(Marker)和信息窗(Popup)
  3. R语言构建catboost模型:构建catboost模型并基于网格搜索获取最优模型参数(Select hyperparameters)、计算特征重要度
  4. 小型电商服务器平台搭建(一)
  5. 其他系统 对外接口设计_设计模式分类及设计原则
  6. 统计学习笔记(3)——k近邻法与kd树
  7. stm32捕获占空比_基于STM32超声波避障小车
  8. ubuntu与mysql5.7设置外网可访问
  9. SylixOS下基于NUC970的NAND驱动
  10. NSWindowController的初始化创建代码
  11. 理解js中的原型链,prototype与__proto__的关系
  12. 利用java求积分(定积分和无穷限积分)
  13. 洛谷 P2463 [SDOI2008]Sandy的卡片 解题报告
  14. 核心控制芯片选型建议书(中低端)
  15. DVM的进程和Linux的进,下面关于Android dvm的进程和Linux的进程,应用程序的进程说法正确的是()...
  16. python相机拍照显示_Python无法从Raspberry Pi相机以最高分辨率拍照
  17. 6.5. Properties
  18. m3u8格式视屏播放
  19. java中如何获取一个字符串的长度呢?
  20. hdu 5325 Crazy Bobo (树形dp)

热门文章

  1. matlab plot 曲线类型
  2. ant design vue table表格组件实现隔行变色
  3. FaceNet论文翻译学习3
  4. 噪音之curl noise
  5. 【深度学习基础】Mac系统安装Anaconda
  6. vue 搜索文本让搜索的字体高亮显示
  7. 2019企鹅号自媒体怎么搬运,企鹅号自媒体视频搬怎么消重去重
  8. C++代码编译失败: 错误:程序中有游离的‘\200’,‘\343’
  9. 字节跳动再战互联网+教育 , 大数据赋能精准教学有何趋势?
  10. linux操作系统CPL、DPL、RPL说明