__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(实例)查看都能看到

 

转载于:https://www.cnblogs.com/saolv/p/8415925.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值