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'>

小结

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

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

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


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

class Foo(object):
    pass


参考

Python黑魔法:元类

上一篇:FDD即将发牌 移动4G如何应对?


下一篇:Git:Git Bash连接MySQL