Python编程:旧式类和新式类的区别

简介: Python编程:旧式类和新式类的区别

先看两段代码

Python 2.7.5

# -*- coding: utf-8 -*-

# 旧式类
class Foo():
    pass


foo = Foo()
print(foo.__class__)
print(type(foo))
# __main__.Foo
# <type 'instance'>
# obj.__class__就表示该类,但type(obj)始终是instance类型


# 新式类
class NewFoo(object):
    pass


new_foo = NewFoo()
print(new_foo.__class__)
print(type(new_foo))
# <class '__main__.NewFoo'>
# <class '__main__.NewFoo'>
# type(obj)则与obj.__class__相同

Python 3.6.5

# -*- coding: utf-8 -*-


class Foo():
pass


foo = Foo()
print(foo.__class__)
print(type(foo))

# <class '__main__.Foo'>
# <class '__main__.Foo'>

class NewFoo(object):
pass


new_foo = NewFoo()
print(new_foo.__class__)
print(type(new_foo))
# <class '__main__.NewFoo'>
# <class '__main__.NewFoo'>

小结

1111.png

新式类: 类(class)和类型(type)相同

旧式类: 类(class)和类型(type)不同


所以,为了兼容py2 和 py3,最好的写法是继承object:

class Foo(object):
pass


参考

Python黑魔法:元类

            </div>
目录
相关文章
|
图形学
Unity 之 超级实用的小技巧
你不知道却超好用的使用Unity使用技巧
228 0
Unity 之 超级实用的小技巧
|
PHP
PHP 9: 表达式
原文:PHP 9: 表达式本章介绍PHP的表达式。PHP的表达式其实和其他语言没有什么区别。普通的赋值是表达式,函数也是表达式,通过函数赋值也是。三元条件运算符也是,即: $first ? $second : $third 这个很多语言里都有,不再多说。
813 0
|
人工智能 C++
深入理解计算机各种类型大小(sizeof)
深入理解计算机各种类型大小(sizeof)   Cpp代码   // Example of the sizeof keyword    size_t  i = sizeof( int );        struct align_depends {    ...
1301 0
|
3天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
269 116
|
18天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
12天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
661 220
|
5天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
334 34
Meta SAM3开源:让图像分割,听懂你的话