Python内置类属性

我觉得一切都是对象,对象和元类对象,类对象其实都是一样的,我在最后进行了证明,但是只能证明一半,最后由于元类的父类是type,他可以阻挡对object属性的访问,告终

__dict__ : 类的属性(包含一个字典,由类的数据属性组成)

__doc__ :类的文档字符串

__name__: 类名

__module__: 类定义所在的模块(类的全名是'main.className',如果类位于一个导入模块mymod中,那么className.module 等于 mymod)

__base__:类的第一个父类

__bases__ : 类的所有父类构成元素(包含了一个由所有父类组成的元组)

__class__:创建本对象的类

__dict__

对象加.能出来的就是存在它里面的。

实验室

例1

从打印结果发现,z对象的__dict__()是空的,为啥他能打印出东西呢?它遵循下面的属性查找关系(需要对元类有了解)

class zx():
pass
z=zx()
print(z.__dict__)
print(z.__module__)
{}
__main__

例2

代码中有两个属性被我注释了,为啥呢?因为它找到type都没有找到,会报错(可以把,zx,object,type__dict__都打印出来,然后在控制台搜索)

class zx():
pass
print(zx)
print(zx.__dict__)
print(zx.__class__)
print(zx.__bases__)
print(object.__dict__)
print(type.__dict__)
print(zx.__name__)
print(zx.__doc__)
# print(zx.__slots__)
print(zx.__qualname__)
print(zx.__module__)
# print(zx.__annotations__)
print(zx.__mro__)

于是属性查找应该分成两层,一层是对象层(基于c3算法的MRO)的查找,另外一个层则是类层(即元类层)的查找

class Mytype(type):
name = "zxtype"
def __new__(cls, *args, **kwargs):
return type.__new__(cls, *args, **kwargs) class hi():
# name = "hi"
pass class ji(hi,metaclass=Mytype):
# name = 'ji'
pass # zx = ji()
#
# print(zx.name) print(ji.name) #查找顺序:自己的总结
先找自己的,再从自己的继承关系找,在找元类的继承关系

总结

1.调用自己__dict__里面的方法的话直接对象调用就行了,而且不会默认传一个对象参数,如果没有用就要用到查找关系了

2.对象

先从自己的dict找

再从自己的继承关系找

先从元类中找

最后从元类继承关系找

元类的属性优先于元类的继承关系

class cc():
name="das"
class zx(cc):
name="20"
z=zx()
print(z.name)
20
class Mytype(type):
name=20 class zx(metaclass=Mytype):#zx=Mytype()
pass print(zx.__doc__)
None #type的__doc__不为None

继承关系__bases__只有object有

自己的继承关系优先于元类的属性

class cc():
name=20 class Mytype(type):
name=10 class zx(cc,metaclass=Mytype):
pass
#相当于zx=Mytype(...)
print(zx.name)
20

对象这块无法证明,对象没有__bases__方法,object也没有,但是type有

Python内置类属性,元类研究的更多相关文章

  1. 4月17日 python学习总结 反射、object内置方法、元类

    一.反射 下述四个函数是专门用来操作类与对象属性的,如何操作? 通过字符串来操作类与对象的属性,这种操作称为反射 class People: country="China" def ...

  2. day31 反射,内置方法,元类

    目录 一.反射 1 什么是反射 2 如何实现反射 二.内置方法 1 什么是内置方法 2 为什么要用内置方法 3 如何使用内置方法 3.1 str 3.2 del 三.元类 1 什么是元类 2 clas ...

  3. 二十六. Python基础(26)--类的内置特殊属性和方法

    二十六. Python基础(26)--类的内置特殊属性和方法 ● 知识框架 ● 类的内置方法/魔法方法案例1: 单例设计模式 # 类的魔法方法 # 案例1: 单例设计模式 class Teacher: ...

  4. python 内置函数的补充 isinstance,issubclass, hasattr ,getattr, setattr, delattr,str,del 用法,以及元类

    isinstance   是 python中的内置函数 , isinstance()用来判断一个函数是不是一个类型 issubclass  是python 中的内置函数,  用来一个类A是不是另外一个 ...

  5. Python内置类属性

    __dict__ : 类的属性(包含一个字典,由类的数据属性组成) __doc__ :类的文档字符串 __name__: 类名 __module__: 类定义所在的模块(类的全名是'__main__. ...

  6. 多态,封装,反射,类内置attr属性,os操作复习

    1.多态 #多态 多态是指对象如何通过他们共同的属性和动作来操作及访问,而不需要考虑他们具体的类 运行时候,多种实现 反应运行时候状态 class H2O: def __init__(self,nam ...

  7. 5 python 内置类

    1.实例属性和类属性 给实例绑定属性的方法是通过实例变量,或者通过self变量: class Chinese: def __init__(self,name,sex,age): self.name = ...

  8. 【python进阶】详解元类及其应用2

    前言 在上一篇文章[python进阶]详解元类及其应用1中,我们提到了关于元类的一些前置知识,介绍了类对象,动态创建类,使用type创建类,这一节我们将继续接着上文来讲~~~ 5.使⽤type创建带有 ...

  9. python中的单例模式、元类

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...

随机推荐

  1. DB2中的MQT优化机制详解和实践

    MQT :物化查询表.是以一次查询的结果为基础  定义创建的表(实表),以量取胜(特别是在百万,千万级别的量,效果更显著),可以更快的查询到我们需要的结果.MQT有两种类型,一种是系统维护的MQT , ...

  2. 字符logo存档

    在做项目的时候在源码开头加上一个自己的Logo就很爽,配合上标准的许可证声明之类的就可以让自己的代码看上去很专业.逼格很高-- 之前用topster.de的ASCII Generator搞过一点log ...

  3. [考试反思]0821NOIP模拟测试28:沉默

    这次不能把我前面的分数段都列出来了,因为实在太多了. 这次也不能把我后面的分数段列出来了,因为我后面没有了. yxm,mikufun,Pairs170100分第10.50分第29. 我:爆零,倒数第一 ...

  4. Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示

    目录管理命令ls:列出指定目录下的内容格式: ls [OPTION]... [FILE]...   -a:显示所有文件包括隐藏文件   -A:显示除.和..之外的所有文件   -l,--long:显示 ...

  5. 「NOIP模拟赛」数位和乘积(dp,高精)

    统计方案数,要么组合数,要么递推(dp)了. 这是有模拟赛历史以来爆炸最狠的一次 T1写了正解,也想到开long long,但是开错了地方然后数组开大了结果100->0 T3看错题本来简单模拟又 ...

  6. windows使用docker运行mysql等工具(一)windows安装docker

    由于我本地的mysql版本比较低,最近想着要升级一下mysql版本,鉴于docker容器的火热,就想着在本地装个docker环境,然后下载最新版的mysql镜像,完成mysql8.0的安装.电脑是wi ...

  7. CSP-S 94 (sb lsc gc赛)

    不要问我为什么题解倒着写,因为在填坑! 关于这场比赛就是我sb的再现 考完试旁边_LH叱的一声说道:“lsc真**垃圾”; lsc:........确实很垃圾! ------------------- ...

  8. Servlet——用户登录案例

    案例:用户登录 * 用户登录案例需求: 1.编写login.html登录页面 username & password 两个输入框 2.使用Druid数据库连接池技术,操作mysql,day14 ...

  9. 关于html与css的标签及属性(text文本属性、背景background属性、表格标签table、列表、)

    text文本属性1.颜色 colorcolor:red: 2.文本缩进text-indant属性值 num+px text-indant:10px:3.文本修饰 text-decoration属性值: ...

  10. hdu 1251 统计难题 (字典树(Trie)<PS:C++提交不得爆内存>)

    统计难题Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submis ...