python类型对象<class ‘type‘>的理解与探究

本文深入探讨Python中类的创建过程,解析类与type类型对象的关系,以及类属性与type类实例属性之间的互动。强调变量类型的动态特性,以及如何通过修改实例属性__class__实现对派生类实例方法的访问。
部署运行你感兴趣的模型镜像

 

'''
1、python解释器创建类时会同步生成与类名"myclass"同名的一个类型对象,类型对象myclass
是内置builtins模块的type类的一个实例,表示一个类型。这个类型对象除了继承有type类
的实例属性(比如type类又从基类object继承的__class__实例属性)外,还"吸收"了用户
定义类时定义的类属性,当用户定义的类属性与type类的实例属性重名时,type类的实例属
性将屏蔽用户定义的类属性,比如下例用户覆盖定义了"__class__"类属性,但不管在类方法
内访问__class__(即cls.__class__),还是在全局作用域访问(即myclass.__class__)都
访问的是type类属性,而不是用户定义的类属性。只有在类型对象myclass的__dict__字典中
才能访问到用户定义的同名类属性
    总结:类型对象的实例属性由两部分组成:1、type类的实例属性,如值恒为<class 'type'>
的__class__属性;2、用户定义类时提供的类属性;

2、python这个动态语言中变量的类型取决于变量的类型属性__class__,__class__值决定
了这个变量的类型,而类型决定了这个变量可以执行的操作,典型用于修改派生类实例对象的
实例属性__class__为基类的类型对象,从而能访问基类的实例方法。
    当然,变量执行操作时会对方法进行名字查找,找不到的话就会提示属性错误
"AttributeError",因此变量的类型属性__class__不能乱改。
'''
class myclass():
    '''自定义类'''
    attrcls1='heihei'
    __class__='haha' #i、类型对象myclass的类type有从object基类继承名字"__class__"
                     #的实例属性,这里为类myclass新增一个同名的类属性
    @classmethod
    def ClsMethod(cls):
        print('cls.__class__: ', cls.__class__)

myclass.ClsMethod() #ii、打印<class 'type'>,并没有打印出"haha",说明type类的实例
                    #属性__class__屏蔽了myclass类的类属性__class__
print('myclass.__class__: ', myclass.__class__) #iii、打印<class 'type'>
print(myclass.attrcls1) #正常打印"heihei"
print('myclass.__dict__["__class__"]', myclass.__dict__["__class__"]) 
              #iV、打印"haha",通过类型对象的属性字典还是可以访问到重名的类属性的
#obj=myclass()
#print('obj: ', obj) #<__main__.myclass object at 0x7efd6fdc32e0>
#print('myclass: ', myclass) #<class '__main__.myclass'>

python3.8执行输出:

haypin@ubt:~/Files$ python3.8 m08012.py
cls.__class__:  <class 'type'>
myclass.__class__:  <class 'type'>
heihei
myclass.__dict__["__class__"] haha
haypin@ubt:~/Files$ 

 

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值