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. Flask:Flask中使用会话技术

    1.会话技术cookie和session (1)cookie 在网站中,HTTP请求是无状态的.也就是说,即使第一次用户访问服务器并登录成功后,第二次请求服务器依然不知道当前发起请求的是哪个用户.co ...

  2. QA:无重复字符的最长子串

    无重复字符的最长字串 leetcode地址:https://leetcode-cn.com/problems/longest-substring-without-repeating-character ...

  3. Codeforces 1109D: generalizations of Cayley's formula证明

    做这题的时候发现题解里有提到\(generalizations\ of\ Cayley's\ formula\)的,当场懵逼,Wikipedia里也就带到了一下,没有解释怎么来的,然后下面贴了篇论文. ...

  4. [考试反思]0920csp-s模拟测试48:弱小

    注:T1全场46个人里42个AC了. %%%zkt也AK了呢越来越强啊 我是真的越来越弱了吗? 我到底在干什么... 在难度递增的题里分数递增... 考试过程大体还好,但是如此快速地WA掉T1也真是蠢 ...

  5. COO 与 CSR 稀疏矩阵存取格式;

    稀疏矩阵是指矩阵中元素大部分是0的矩阵,事实上,实际问题中大规模矩阵基本上是稀疏矩阵,很多稀疏度在90%甚至99%以上:因此我们需要有高效的稀疏矩阵存储格式. 本文参考了 https://www.cn ...

  6. 谷歌Chrome浏览器无法安装插件的解决方法(本文干货!)

    这个问题困扰了我很久,作为小白学习可能会用到谷歌插件,奈何谷歌也太变态,国内的环境无法正常登录谷歌账户.无法访问应用商店,而Chrome主版本号大于66的只能从Chrome应用商店下载并安装插件,各种 ...

  7. Hibernate一对多、多对一的关系表达

    一.关系表达: 1.一对多.多对一表的关系: 学生表: 班级表: 在学生表中,学生的学号是主键.在班级表中,班级号是主键,因此,学生表的外键是classno.因此,班级对应学生是一对多,学生对应班级是 ...

  8. Scrapy进阶知识点总结(五)——Settings

    1.设置优先级 Scrapy中有不同层次的设置,其类型以及优先级如下(从高到低): 1.命令行命令中指定的设置 2.每个spider中的设置 3.scrapy项目中settings.py设置 4.命令 ...

  9. 014.Kubernetes二进制部署docker

    一 部署docker 1.1 部署docker组件 docker 运行和管理容器,kubelet 通过 Container Runtime Interface (CRI) 与它进行交互. 1.2 下载 ...

  10. VS 使用 :新建项目

    1.文件位置不放C盘