在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. JAVA微信开发-如何保存包含特殊字符的微信昵称

    我们在做微信开发的时候,有一个很重要的就是通过openid获取用户的详细信息,包含昵称,头像,省,市,区的信息,但是现在移动时代,很多人追求个性,在名字当中大量使用火星文或者表情符.(本人实际测试过一 ...

  2. 【原创】MongoDB安装配置详解(标注两个坑)

    1.下载安装 3.4正式版([坑]不要最新版,有可能进度卡在这个位置不动,等了半个小时也没什么反映,) http://downloads.mongodb.org/win32/mongodb-win32 ...

  3. 调用k8s api遇到CERTIFICATE_VERIFY_FAILED的问题解决方法

    前言 python3.5.6版本,django1.1.12版本 最近要调用k8s接口,k8s接口的使用方法请参考官网的说明:戳我 调用k8s接口时,遇到 CERTIFICATE_VERIFY_FAIL ...

  4. oracle的jdbc 的maven配置

    oracle的jdbc是需要收费,因此在maven的中心库是无法下载.有两个办法引入到工程中,一个是手工,另外一个是加入oracle自己的maven库 一.手工配置(本地依赖) 首先要下载到想要的版本 ...

  5. Ubuntu新建用户并指定目录

    例如我要新建一个nginx用户,并指定目录,允许使用bash登录 sudo useradd -d "/home/nginx" -m -s "/bin/bash" ...

  6. springboot入门简单,深入难

    18年1月份的时候在腾讯课堂学习springboot.springcloud搭建微服务,老师告诉我们,springboot入门容易,深入难. 因为你必须东西SpringMVC.Spring.Mybat ...

  7. pcl使用入门

    最近在学习pcl,C++早就忘记了,所以踩了好些坑 不过终于通过了,特此记录下来 环境:win7+pcl1.81+vs2015 1.安装pcl1.81 下载PCL-1.8.1-AllInOne-msv ...

  8. .Net Core 定时任务TimeJob

    转载自:https://blog.csdn.net/u013711462/article/details/53449799 定时任务 Pomelo.AspNetCore.TimedJob Pomelo ...

  9. python jieba 词云

    #!/usr/bin/python # coding:utf-8 # 绘制一个<三体>全集词云 # pip install jieba # pip install matplotlib # ...

  10. Apache软件基金会核心项目Tomcat的那些事

    Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选.今天就来为大家介绍一下关于T ...