python魔术方法

常规:

__del__魔术方法:

对象即将被释放的时候,会调用这个方法。注意如果这个对象产生了循环引用,并且实现了__del__方法,那么这个对象将得不到释放,从而产生内存泄漏。因此慎用这个方法。

__new__魔术方法:

这个方法用来创建对象。如果想在创建对象的时候做些事情,那么可以重写这个方法。

__class__魔术属性:

用来返回这个对象所属的。如果一个类调用这个属性,那么得到的是这个类的元类

__iter__魔术方法:

返回一个迭代器。

__next__魔术方法:

迭代器在被遍历的时候会每遍历一次调用这个方法(在Python3中,在Python2中使用的是next方法)

__str__魔术方法:

  1. 在打印某个对象的时候,会调用这个对象的__str__方法,打印这个方法的返回值。
class Person(object):
    def __init__(self,name):
        self.name = name
p1 = Person('zhouxin')
print(p1)
# 打印出来的结果:
# <__main__.Person object at 0x008AD170>

而重写了__str__方法,那么打印出来的就是__str__的返回值:

class Person(object):
    def __init__(self,name):
        self.name = name
    def __str__(self):
        return 'Person<%s>' % self.name
p1 = Person('zhouxin')
print(p1)
# 打印出来的结果:
# Person<zhouxin>
  1. 如果在使用str(obj)这个函数的时候,也会调用__str__方法。

__repr__魔术方法:

  1. __repr__魔术方法是用来表述某个对象在内存中的展示形式
  2. 如果在终端直接输入一个对象,然后按回车,那么将会执行这个对象的__repr__方法。
  3. 如果你将几个对象扔到一个容器中(比如:列表),那么你在打印这个容器的时候,会依次调用这个容器中的元素的__repr__方法。如果没有实现这个__repr__方法,那么得到的将是一个类名+地址的形式,这种形式的是不好理解的。
class Person(object):
    def __init__(self,name):
        self.name = name

    def __repr__(self):
        return "Person(%s)" % self.name

p1 = Person('zhouxin1')
p2 = Person('zhouxin2')
a = [p1,p2]
print(a)
# 打印的结果:
[Person(zhouxin1), Person(zhouxin2)]

__dict__魔术属性:

  1. 用来获取用户自定义的属性,以及这个属性对应的值。返回的是一个字典
  2. dir函数做一个区分。dir函数返回的是这个对象上拥有的所有属性,包括Python内置的属性和用户自己添加的,并且只是获取属性名字,不会获取这个属性对应的值。

比较:

__cmp__魔术方法:

__cmp__(self,other)这个方法在Python2中可以正常使用。如果self是大于other的,那么应该返回正数,如果self等于other,那么应该返回0,如果self小于other,那么应该返回负数。
这个方法只能在Python2中起作用,在Python3中不再有用了。

class Person(object):
    def __init__(self,name,age,height):
        self.name = name
        self.age = age
        self.height = height

    def __cmp__(self, other):
        if self.age == other.age:
            if self.height == self.height:
                return 0
            else:
                return 1 if self.height > other.height else -1
        return 1 if self.age > other.age else -1

__eq__(self,other)

比较两个对象是否相等,如果相等,那么返回True,否则返回Flase

class Person(object):
    def __init__(self,name,age,height):
        self.name = name
        self.age = age
        self.height = height

    def __eq__(self, other):
        # self == other
        if self.age == other.age:
            if self.height == other.height:
                return True
            else:
                return True if self.height == other.height else False

__ne__(self,other)

如果两个对象不想等,那么返回True,否则返回Flase

class Person(object):
    def __init__(self,name,age,height):
        self
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值