先看两段代码
Python 2.7.5
# -*- coding: utf-8 -*-
# 旧式类
class Foo():
pass
foo = Foo()
print(foo.__class__)
print(type(foo))
# __main__.Foo
#
# obj.__class__就表示该类,但type(obj)始终是instance类型
# 新式类
class NewFoo(object):
pass
new_foo = NewFoo()
print(new_foo.__class__)
print(type(new_foo))
#
#
# type(obj)则与obj.__class__相同
Python 3.6.5
# -*- coding: utf-8 -*-
class Foo():
pass
foo = Foo()
print(foo.__class__)
print(type(foo))
#
#
class NewFoo(object):
pass
new_foo = NewFoo()
print(new_foo.__class__)
print(type(new_foo))
#
#
小结
版本class Foo()
class Foo(object)
Python 2.7.5旧式类新式类Python 3.6.5新式类新式类
新式类: 类(class)和类型(type)相同 旧式类: 类(class)和类型(type)不同
所以,为了兼容py2 和 py3,最好的写法是继承object:
class Foo(object):
pass
参考 Python黑魔法:元类