python class 一点总结

Python class 总结

细数class中的 __**__

  • __init__(self, *values)
    对象的初始化函数,初始化类的实例时,会调用这个方法
  • __str__(self)
    返回 print对象时要打印的东西,pirnt(obj)时会调用这个方法
  • __iter__(self)__next__(self)
    将对象 变为可迭代对象,__iter__()用于iter(),__next__用于next()
  • __getitem__(self, key)
    使得对象可以向类表一样使用,obj[2], obj[2:4]
  • __setitem__(self, key, value)
    可以使对象的key被赋值
obj['hello'] = 'world'
  • __getattr__(self, attr)
    如果对象没有所调用的属性的时候,就会把属性名送进这个方法,看看这个方法返回什么
  • __getattribute__(self, item)
    所有的属性访问都会经过这个接口
class People(object):
    def __init__(self):
        self.name = "h"

    def __getattribute__(self, item):
        print("get->",item)
        return object.__getattribute__(self,item)

    def __getattr__(self, item):
        print("hello")

    def m(self):
        self.name = 'a'

p = People()
p.m()
print(p.name)
# get-> m
# get-> name
# a
  • __setattr__(self, name, value)
    当每次给一个属性赋值的时候,就会调用这个方法
class People(object):
    def __init__(self):
        self.name = "h"

    def __setattr__(self, key, value):
        super(People, self).__setattr__(key,value)
        #self.__dict__[key] = value
        print("hello")
    def m(self):
        self.name = 'a'

p = People()
p.m()
print(p.name)
# hello
# hello
# a 
  • __call__(self, *value)
    使得类的实例可以像函数一样被调用

  • __len__(self)
    当执行len(obj)时,被调用

  • __slots__
    这个和前几个不太一样,它是个类的属性,不是方法,这个用来限制类的实例所能动态添加的属性

细数用在class中的装饰器

  1. @property
    是一个装饰器,将一个方法当作属性调用
  2. @staticmethod
    将方法定义成静态方法,不需要传入self
  3. @classmethod
    将一个方法定义成类方法,传入cls而不是self
  4. @abstraction
    将一个方法声明成抽象方法

参考资料

http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143186739713011a09b63dcbd42cc87f907a778b3ac73000
http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143186781871161bc8d6497004764b398401a401d4cce000
http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014319098638265527beb24f7840aa97de564ccc7f20f6000
https://jeffknupp.com/blog/2014/06/18/improve-your-python-python-classes-and-object-oriented-programming/
http://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python
https://docs.python.org/3/library/functions.html#setattr

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值