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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员互动联盟

【Java概念学习】--数组的初始化

一维数组的声明方式: type var[]; 或type[] var; 声明数组时不能指定其长度(数组中元素的个数), Java中使用关键字new创建数组对象,...

33011
来自专栏我的博客

Objective-C基础知识

1.标示符:字母、下划线、美元符号和数字组成,字母和下划线美元符号开头,区分大小写 2.代码区存放代码,数据区存放静态变量和字符串常量,栈存放局部变量,堆存放...

1923
来自专栏架构之路

Java中Class类详解、用法及泛化

Java中Class类及用法 Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识,即所谓的RTTI。这项信息纪录了每个对象所属的...

2776
来自专栏云霄雨霁

Dijkstra双栈表达式求值算法

1340
来自专栏吾爱乐享

java之学习Integer类相关面试题

1364
来自专栏程序员互动联盟

【记忆卡片】C语言32个关键字

C语言的关键字共有32个,可分其为 数据类型关键字、控制语句关键字、存储类型关键字以及其它关键字 数据类型关键字(12个): (1) char :声明字符型变量...

3547
来自专栏java学习

面试题50(关于类的加载顺序的掌握)

子类A继承父类B,A a = new A(); 则父类B构造函数、父类B静态代码块、父类B非静态代码块、子类A构造函数、子类A静态代码块、子类A非静态代码块执行...

2565
来自专栏吾爱乐享

java之学习基本类型包装类的概述及Integer类的概述和构造方法

1444
来自专栏King_3的技术专栏

leetcode-521-Longest Uncommon Subsequence I

1989
来自专栏北京马哥教育

Python Re 模块最全解读: 11703 字帮你彻底掌握

re模块下的函数 compile(pattern):创建模式对象 import re pat=re.compile('A') m=pat.search('CBA...

32910

扫码关注云+社区