zoukankan      html  css  js  c++  java
  • __class__属性与元类

     1 class M(type):
     2     def __str__(self):
     3         return "gege"
     4     aa = "ccf"
     5     cc = "ccc"
     6 
     7 class TM:
     8     cc = "ddd"
     9     __metaclass__ = M
    10 print (TM.__class__)#<class '__main__.M'>
    11 a = TM()
    12 print (TM.__metaclass__.cc)#ccc
    13 print (TM.aa)#ccf
    14 print (TM.cc)#ddd
    15 #print (a.aa) #error

    class属性类似于以上例子中的__metaclass__

    实例.__class__等价于实例的所属类

    回过头来补充说明。

    继承type类的类就是元类,而我们新创建一个类,__metaclass__可以指定这个类是哪个元类的对象,如果不指定,则默认是type类的对象

    更新:

    类与类的类,跟实例与类,这两个对应还是有点区别的。

    就比如上面那个例子,类TM的类M具备aa属性,我们用dir(TM)是看不到aa属性的,用hasattr(TM,"aa"),返回的也是false,但这不妨碍TM可以调用aa属性,只不过,TM的实例不能调用aa属性。

    而一般的实例与类,只要类中具备的属性,用dir(实例)查看都能看到

  • 相关阅读:
    并查集
    结构体字节对齐
    Dijkstra算法(单源最短路径)
    图的遍历
    二叉树的非递归遍历
    浅谈C语言中的联合体
    二叉排序(查找)树
    KMP算法
    C语言文件操作解析(四)
    Trie树
  • 原文地址:https://www.cnblogs.com/saolv/p/8415925.html
Copyright © 2011-2022 走看看