python基础——魔术方法

魔术方法

    • 魔术方法
      • __init__方法
      • __new__方法
      • __del__方法
      • __call__方法
      • __str__和__repr__方法

魔术方法

__init__方法

  • 触发时机:初始化对象时触发(不是实例化触发,但是和实例化在一个操作中)
  • 参数:至少有一个self,接收对象
  • 返回值:无
  • 作用:初始化对象的成员
class Cat:
    """这是一个猫类"""
    def __init__(self, name):#重写了__init__魔法方法
        self.name = name

    def eat(self):
        return "%s爱吃鱼" % self.name

tom = Cat("Tom")  # 创建对象时,必须要指定name属性的值
print(tom.eat())  # Tom爱吃鱼

__new__方法

实例化魔术方法

  • 触发时机: 在实例化对时触发
  • 参数:至少一个cls 接收当前类
  • 返回值:必须返回一个对象实例
  • 作用:实例化对象
  • 注意:实例化对象是Object类底层实现,其他类继承了Object的__new__才能够实现实例化对象。
  • 先触发__new__才会触发__init__

python基础——魔术方法_第1张图片

class Person:
    def __init__(self):
        print('------------------->init')

    def __new__(cls, *args, **kwargs):
        print('---------------->new')
        return object.__new__(cls)


p = Person()
print(p)

__del__方法

析构魔术方法

  • 触发时机:当没有任何变量引用的时候被触发
  • 参数:一个self 结婚搜对象
  • 返回值:无
  • 作用:使用完对象是回收资源

注意:del不一定会触发当前方法,只有当前对象没有任何变量接收时才会触发

class Student:
    def __init__(self):
        print('__init__方法被调用了')

    def __del__(self):
        print('__del__方法被调用了')

 
s = Student()
print('---->程序结束')

----------------------》
__init__方法被调用了
---->程序结束
__del__方法被调用了

__call__方法

调用对象的魔术方法(类似函数调用)

  • 触发时机:将对象当作函数调用时触发 对象()
  • 参数:至少一个self接收对象,其余根据调用时参数决定
  • 返回值:根据情况而定
  • 作用:可以将复杂的步骤进行合并操作,减少调用的步骤,方便使用

注意:无

class Foo:
    def __init__(self):
        pass

    def __call__(self, *args, **kwargs):
        print('调用__call__')


f = Foo()
f()  # 执行 __call__

__str__和__repr__方法

  • 触发时机:使用print(对象)或者str(对象)的时候触发
  • 参数:一个self接收对象
  • 返回值:必须是字符串类型

作用:print(对象时)进行操作,得到字符串,通常用于快捷操作

class Person():

    def __init__(self, name):
        self.name = name

    def __repr__(self):
        a = 'name----》%s ' % (self.name)
        return a

    def __str__(self):
        a = 'name: %s ' % (self.name)
        return a


person = Person('张三')

#如果两个都有

  • 默认执行__str__方法
  • 如果 ‘%r’ 这种,就调用__repr__方法。
print('%r' % person)  #name----》张三

你可能感兴趣的:(python基础,python)