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. Docker安装ElasticSearch 以及使用LogStash实现索引库和数据库同步

    1:下载 ElasticSearch 镜像 docker pull docker.io/elasticsearch:5.6.8 2:创建 ElasticSearch 容器: 注意:5.0默认分配jvm ...

  2. python中PIL模块

    Image模块 Image模块是在Python PIL图像处理中常见的模块,对图像进行基础操作的功能基本都包含于此模块内.如open.save.conver.show-等功能. open类 Image ...

  3. 【IT教程-Oracle】尚观Oracle白金级入门教程

    链接: https://pan.baidu.com/s/1GMncQN6mpgaH3hZQjGelaA 提取码: qu6j

  4. [开源] gnet: 一个轻量级且高性能的 Golang 网络库

    Github 主页 https://github.com/panjf2000/gnet 欢迎大家围观~~,目前还在持续更新,感兴趣的话可以 star 一下暗中观察哦. 简介 gnet 是一个基于 Ev ...

  5. Java基本数据类型的传值

    传递值: 说明:标题其实说法是错误的.Java中只有值传递,没有引用传递. ... ... //定义了一个改变参数值的函数 public static void changeValue(int x) ...

  6. ElasticSearch(二):文档的基本CRUD与批量操作

    ElasticSearch(二):文档的基本CRUD与批量操作 学习课程链接<Elasticsearch核心技术与实战> Create 文档 支持自动生成文档_id和指定文档_id两种方式 ...

  7. 网页文件打包成.exe可执行文件

    网页文件不止可以通过浏览器打开,也可以通过打包程序打包成.exe桌面可执行程序,这样写的网页文件就可以像桌面应用一样打开了.方法如下: 工具:NW.js.Enigma Virtual Box.资源编辑 ...

  8. Python脚本之——API自动化框架总结

    学完了Python脚本接口自动化之后,一直没有对该框架做总结,今天终于试着来做一份总结了. 框架结构如下图: 来说一下每个目录的作用: Configs:该目录下存放的是.conf,.ini文件格式的配 ...

  9. 「CF630C」Lucky Numbers

    更好的阅读体验 Portal Portal1: Codeforces Portal2: Luogu Description The numbers of all offices in the new ...

  10. Spring 应用之Spring JDBC实现

    jdbcTemplate类的入门 方式一 POM.XML <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:x ...