python常用内建属性大全
在python中创建一个类,它不仅有我们自定义的属性和方法,还有与生俱来的一些属性和方法,我们叫它内建属性。
下面是类常用内建属性列表。
常用专有属性 | 说明 | 触发方式 |
---|---|---|
__init__ | 构造初始化函数 | 创建实例后,赋值时使用,在__new__ 后 |
__new__ | 生成实例所需属性 | 创建实例时 |
__class__ | 实例所在的类 | 实例.__class__ |
__str__ | 实例字符串表示,可读性 | print(类实例),如没实现,使用repr结果 |
__repr__ | 实例字符串表示,准确性 | 类实例 回车 或者 print(repr(类实例)) |
__del__ | 析构 | del删除实例 |
__dict__ | 实例自定义属性 | vars(实例.__dict__) |
__doc__ | 类文档,子类不继承 | help(类或实例) |
__getattribute__ | 属性访问拦截器 | 访问实例属性时 |
__bases__ | 类的所有父类构成元素 | 类名.__bases__ |
__init__
负责一个类实例化中的初始化操作
__new__
在创建实例化时发生作用,在__init__之前执行,主要作用是创建实例对象,典型的应用是在单利模式中.
class Singleton(object):
def __new__(cls, *args, **kw):
if not hasattr(cls, '_instance'):
org = super(Singleton, cls)
cls._instance = org.__new__(cls, *args, **kw)
return cls._instance
__class__
是示例对象的属性,该属性指向了实例化该对象的类,代表实例化该对象的抽象类,可以通过它调用类的方法和类属性。
class Test:
name = "抽象类"
def __init__(self):
self.name = '实例名字'
def test(self):
print('实例方法')
test = Test()
test.__class__.name
Out[21]: '抽象类'
test.__class__.test(1)
实例方法
__str__
实例化对象的字符串表示(代表名字),面向用户,通过print输出实例化类的结果
class Test:
def __str__(self):
return '这是实例化类的说明书'
test = Test()
print(test)
这是实例化类的说明书
__repr__
实例化对象的字符串表示,面向开发者的
class Test:
def __str__(self):
return '用户可见'
def __repr__(self):
return '开发者可见'
test = Test()
print(test)
用户可见
test
Out[30]: 开发者可见
在控制台输出实例化对象时的显示信息
__del__
当一个实例化对象被删除时,该方法将调用,该方法是执行删除对象的操作。
class Test:
def __del__(self):
print('我被删除了】')
test = Test()
del test
我被删了
__dict__
类或实例化对象的属性字典
class Test:
name = "抽象类"
def __init__(self):
self.name = '实例名字'
def test(self):
print('实例方法')
test = Test()
test.__dict__
Out[51]: {'name': '实例名字'}
Test.__dict__
Out[52]:
mappingproxy({'__dict__': <attribute '__dict__' of 'Test' objects>,
'__doc__': None,
'__init__': <function __main__.Test.__init__>,
'__module__': '__main__',
'__weakref__': <attribute '__weakref__' of 'Test' objects>,
'name': '抽象类',
'test': <function __main__.Test.test>})
__doc__
是对函数/方法/模块所实现功能的简单描述,但当指向具体对象时,会显示此
对象.
class Test:
"""我是说明书"""
test = Test()
test.__doc__
Out[60]: '我是说明书'
__getattribute__
属性拦截器,内部拦截修改某个属性的值
class Test:
def __init__(self):
self.name = '正常名字'
def __getattribute__(self, name):
return '拦截后名字'
test = Test()
test.name
Out[63]: '拦截后名字'
__bases__
查询类的父类元素
class A:
pass
class B:
pass
class C(A, B):
pass
C.__bases__
Out[94]: (__main__.A, __main__.B)
内建属性一般是不建议修改,如果要修改那么尽量将整套的内建属性复写,否则容易出现错误。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【LintCode: 3. 统计数字】算法题解析
这是一道来自LintCode的算法题目,本文用C++来解答这道题,链接为: https://www.lintcode.com/problem/digit-counts/description 题目描述 计算数字k在0到n中的出现的次数,k可能是0~9的一个值。 样例 例如n=12,k=1,在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],我们发现1出现了5次 (1, 10, 11, 12) 思路 当k=1时,对于整数1111,一共出现了4次,也就是判断每一位上的数字是不是1, 数字1111共有4位,就要对其判断4次,从个位开始,除以10取余数即可。 按照这个思路,代码如下: 代码 #include #include <sys/time.h> class Solution { public: /** * @param k: An integer * @param n: An integer * @return: An integer denote the count of digit k in 1..n */ int digitCoun...
- 下一篇
python垃圾回收机制(GC)相关问题
在使用python中很少遇到内存溢出的问题,也不关心内存的管理问题,这是高级语言自带的处理机制,将内部的垃圾空间清除。 要清楚是怎么回收垃圾的,那我们应该先明白什么情况下产生垃圾,就涉及到python内部的对象管理方法。 对于int类型的变量在[5, 257)范围内是共用对象常驻内存,不在此范围内的话一个变量建立一个对象。 单个字符是常驻内存共用对象,字符串是引用计数机制(相同的值指向同一个对象) a=256 a1=256 b=257 b1=257 id(a)==id(a1)Out[6]:True id(b)==id(b1)Out[7]:False c1='a' c='a' d='sdsds4' d1='sdsds4' id(c)==id(c1)Out[12]:True id(d)==id(d1)Out[13]:True 首先在对象管理上已经做到了最小化的内存开销,并不是一个变量一个对象,而是多种方案结合。 那再看垃圾回收的机制,与C/C++有别的是python内部实现了自动的垃圾回收,而无需用户考虑什么时候销毁一个对象或变量。python的垃圾回收机制是以引用计数机制为主,标记-清除...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,CentOS7官方镜像安装Oracle11G
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器