在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)
 

内建属性一般是不建议修改,如果要修改那么尽量将整套的内建属性复写,否则容易出现错误。

python 内建属性的更多相关文章

  1. Python属性和内建属性

    属性property 1. 私有属性添加getter和setter方法 class Money(object): def __init__(self): self.__money = 0 def ge ...

  2. Python 属性方法、类方法、静态方法、 特殊属性__doc__ (内建属性)

    总结:和类的关联性讲:属性方法>类方法>静态方法 属性方法@property:仅仅是调用方式不用+括号. 类方法@classmethod:访问不了累的属性变量,只可以访问类变量. 静态方法 ...

  3. [pyhton]python内建方法

    撸一遍python的内建方法 这样做的好处就是:我如果要完成一个功能的时候,如果能用内建方法完成,就用内建方法.这样可以提高效率,同时使自己的代码更加优雅.哎呦?那岂不是撸完就是python高手了?我 ...

  4. python内建的命名空间研究

    python内建的命名空间研究 说明: python内置模块的命名空间.python在启动的时候会自动为我们载入很多内置的函数.类,比如 dict,list,type,print,这些都位于 __bu ...

  5. 类装饰器,元类,垃圾回收GC,内建属性、内建方法,集合,functools模块,常见模块

    '''''''''类装饰器'''class Test(): def __init__(self,func): print('---初始化---') print('func name is %s'%fu ...

  6. 13 内建属性 _getattribute_ 内建函数

    1.内建属性 2.__getattribute__ 属性访问时拦截器 class Itcast(object): def __init__(self,subject1): self.subject1 ...

  7. Python内建模块--collections

    python内建模块--collections collections是Python内建的一个集合模块,提供了许多有用的集合类. namedtuple 我们知道tuple可以表示不变集合,例如,一个点 ...

  8. Python内建的对象列表

    Python内建的对象列表 刚写Python肯定会遇到这样的情况,想写些什么,但又不知从何写起... 在我看来问题在于我们不知道有什么东东可以拿来玩,这里列出Python的内建对象,稍微归类了一下,多 ...

  9. Python 中内建属性 __getattribute__

    参考自:https://blog.csdn.net/yitiaodashu/article/details/78974596 __getattribute__是属性访问拦截器,就是当这个类的属性被访问 ...

随机推荐

  1. 002 vue-resource

    一:概述 1.说明 https://github.com/pagekit/vue-resource 2.使用方法 Vue.http.get('/someUrl', [config]).then(suc ...

  2. activiti 自定义用户

    https://blog.csdn.net/meng564764406/article/details/53789958 此文目的: 对网络上的关于对activiti 使用做一个总结,因为很难找到一个 ...

  3. 人物-IT-李想:百科

    ylbtech-人物-IT-李想:百科 李想,1981年10月出生于河北石家庄,80后企业家代表人物.曾先后创立泡泡网.汽车之家,现任车和家创始人及CEO. 1998年还在上高中的李想就开始做个人网站 ...

  4. 命令mark

    for i in `sudo /usr/local/sbin/fping -g 10.181.37.0/26 -p 10 -r 1 | grep alive | awk '{print $1 }'`; ...

  5. js 模糊搜索

    function fuzzysearch (needle, haystack) { var hlen = haystack.length; var nlen = needle.length; if ( ...

  6. [LeetCode] 355. Design Twitter 设计推特

    Design a simplified version of Twitter where users can post tweets, follow/unfollow another user and ...

  7. IDEA进行activiti-archetype-unittest脚手架的安装

    官网:https://www.activiti.org/ 第一步:下载activiti源码(https://github.com/Activiti/Activiti/tags) 第二步:在termin ...

  8. 面试之哈希表leetcode

    1 案例1 leetcode-----242 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 示例 1: 输入: s = "anagram", t ...

  9. matlab调试时子函数断点不起作用

    matlab调试代码时总是遇到这样一个奇怪的问题,就是当我在主程序(.m脚本)中调用子函数并在子函数中设置断点,然后开始调试运行主程序... 发现主程序直接运行到结束而并没有在调用子函数的时候在所设置 ...

  10. [转帖]Redis性能解析--Redis为什么那么快?

    Redis性能解析--Redis为什么那么快? https://www.cnblogs.com/xlecho/p/11832118.html echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加e ...