1,object
我们可以通过__bases__获取类的父类:
class Animal:
pass
# 单继承语法
class Dog(Animal):
pass
print(Animal.__bases__)
print(Dog.__bases__)
(<class 'object'>,)
(<class '__main__.Animal'>,)
我们查看object这个类的源码,里面封装了很多方法,那么Animal这个类就可以直接拿来用
在python3.x版本,创建类默认继承object类;
包括系统的内置的类,比如str int都是继承object这个类,bool类型的父类是int
print(int.__bases__)
print(str.__bases__)
print(bool.__bases__)
(<class 'object'>,)
(<class 'object'>,)
(<class 'int'>,)
2,type
a:int = 10
在python中万物皆对象,10也是一个对象,10的类的是int,int的类是type,把type称作元类
元类是生产类对象的类
我们想查看一个对象的类是什么,通过__class__方法:
d是实例对象,d的类是Dog,而Dog是类对象,它的类是type,type也是一个对象
class Animal:
pass
# 单继承语法
class Dog(Animal):
pass
d = Dog()
print(d.__class__)
print(Dog.__class__)
print(Animal.__class__)
print(type.__class__)
print(object.__class__)
<class '__main__.Dog'>
<class 'type'>
<class 'type'>
<class 'type'>
<class 'type'>
我们可以发现,object这个类对象也是由type这个元类创建出来的
我们查看type的源码发现:
class type(object):
"""
type(object_or_name, bases, dict)
type(object) -> the object's type
type(name, bases, dict) -> a new type
"""
type这个元类又继承了object这个类
3,总结
流程图:
从实例化的角度来看:
type这个类创建了很多个类对象包括str int object和它自己
从继承的角度来看:
dog这个类对象继承至object;type这个类对象也继承至object
所以type和dog类对象就会拥有object类的一些特性
所以新式类会有更多的功能,因为它继承了object这个类;经典类因为没有继承object,所以功能会更少一些