美文网首页
python基础学习3(魔法方法)

python基础学习3(魔法方法)

作者: SecondRocker | 来源:发表于2018-07-15 23:28 被阅读14次

python中以__(双下划线)开头的方法,有特殊的作用,称之为魔法方法:

__init__

此方法为类的构造方法,实例化对象时调用此方法。

class A:
  def __init__(self):
    print('init A instance')

A() #打印init A instance

__str__

print 类对象时打印的是此方法返回的字符串(必须返回字符串)

class A:
  def __str__(self):
    return "customer str method"

print(A()) #打印 customer str method

__ repr__

此方法对开发者有效,显示变量调用时打印此方法返回字符串(必须返回字符串)

class A:
  def __repr__(self):
    return '<this is a instance of A>'

A() #打印<this is a instance of A>

__iter__,__next__

提供这两个方法可使对象能实现for ... in 循环,__iter__返回可迭代对象,此对象的__next__ 方法拿到循环的下一个值

class A:
  def __iter__(self):
    return B([1,2,3])

class B:
  def __init__(self,arr):
    self.arr = arr
    self.index = -1
  def __next__(self):
    self.index += 1
    if self.index > len(self.arr) - 1: # 退出循环的条件
      raise StopIteration()
    return self.arr[self.index]

for i in A():
  print(i) #打印 1,2,3

__getitem__

此方法会在凋用索引方法时调用,取到第n个元素

class Fib:
  def __getitem__(self,n):
    a,b = 1,1
    if isinstance(n,int):
      for i in range(n):
        a,b = b,a+b
      return a
    if isinstance(n,slice):
      rtn = []
      start,stop = n.start,n.stop
      if start is None:
        start = 0
      for i in range(stop):
        if(i >= start):
          rtn.append(a)
        a,b = b,a+b
      return rtn

print(Fib()[3]) #打印3
print(Fib()[0:3]) #打印 1,1,2

__getattr__

此方法类似于ruby 的method_missing,在调用未定义的方法、属性时会调用此方法:

class A:
  def __getattr__(self,name):
    if name == 'action':
        return lambda : "%s method is call" % name
    return "%s attribute is call" % name

print(A().action()) # action method is call
print(A().aaa) #aaa attribute is call
#可在方法内raise AttributeError 对不干涉的方法、属性报错

__call__

可使对象变成可调用方法

class A:
  def __call__(self):
    print("call as a method")

A()() #call as a method
A()# 这种对象叫做Callable对象,可用callable方法判断 是否是该类对象
print(callable(A())) #True

相关文章

  • python基础学习3(魔法方法)

    python中以__(双下划线)开头的方法,有特殊的作用,称之为魔法方法: __init__ 此方法为类的构造方法...

  • python 魔法方法

    内置魔法方法参见:官网:Python数据模型Python 魔术方法指南 ——稍微有点乱 Python魔法方法指南...

  • Python 魔法方法总结

    Python 魔法方法 基础: __init__()方法在创建实例后调用.如果你想控制创建过程,请使用__new_...

  • Python魔法方法(持续更新)

    Python魔法方法(持续更新) 简介 魔法方法是python内置方法,不需要主动调用,存在的目的是为了给pyth...

  • Python的魔法方法:__init__(),__getitem

    Python的魔法方法(Magic Method)是Python的一种高级语法,允许你在类中自定义方法,魔法方法的...

  • python学习路线暂定

    基础篇学习: 1: 《笨方法学习python》完成 2:《廖雪峰python》2.7版 到实战...

  • Python3学习笔记--基础知识

    Python3学习笔记--基础知识

  • Python提升2--魔法方法

    第二章 魔法方法魔法方法大全,参考于:Python 魔法方法详解https://fishc.com.cn/thre...

  • 面试题大全

    Python基础部分 1. 为什么学习python 2. 通过什么途径学习Python 3. 谈谈对Python和...

  • 序章

    目标:系统全面学习python高级知识和并发编程方法:功能-> 原理 -> 应用案例技术:面向对象、魔法方法、元类...

网友评论

      本文标题:python基础学习3(魔法方法)

      本文链接:https://www.haomeiwen.com/subject/qtdmpftx.html