首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么type(object)返回<class 'type'>而不是<class 'object'>?

type(object)返回<class 'type'>而不是<class 'object'>的原因是因为在Python中,type是一个内置函数,用于返回对象的类型。当我们调用type(object)时,实际上是在获取object对象的类型,而不是获取object对象本身。

在Python中,所有的对象都是某个类的实例,而类本身也是一个对象。type函数返回的是对象的类,而不是对象本身。因此,type(object)返回的是object对象所属的类的类型,即<class 'type'>。

<class 'type'>是Python中所有类的元类(metaclass)的类型。元类是用于创建类的类,它定义了类的创建和初始化过程。在Python中,所有的类都是type类的实例,而type类本身也是一个类,它是所有类的元类。

总结起来,type(object)返回<class 'type'>而不是<class 'object'>是因为type函数返回的是对象的类的类型,而不是对象本身。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么 useState 返回的是 array 不是 object

,那么为什么返回数组不是返回对象呢?...为什么返回数组不是返回对象 要弄懂这个问题要先明白 ES6 的解构赋值,来看 2 个简单的例子: 数组的解构赋值 const foo = [1, 2, 3]; const [one, two, three...,那么使用者可以对数组中的元素命名,代码看起来也比较干净 如果 useState 返回的是对象,在解构对象的时候必须要和 useState 内部实现返回的对象同名,想要使用多次的话,必须得设置别名才能使用返回值...array 不是 object 的原因就是为了降低使用的复杂度,返回数组的话可以直接根据顺序解构,返回对象的话要想使用多次就得定义别名了 首发自:为什么 useState 返回的是 array...不是 object

2.2K20

为什么 waitnotifynotifyAll 在 Object 类定义不是 Thread 类?

就像为什么 Java 中不支持多继承或者为什么 String 在 Java 中是 final 的问题一样,这个问题也可能有多个答案。...为什么Object 类中定义 wait 和 notify 方法,每个人都能说出一些理由。...为何 wait,notify 和 notifyAll 属于 Object 类? 为什么它们不应该在 Thread 类中?...2) 每个对象都可上锁,这是在 Object不是 Thread 类中声明 wait 和 notify 的另一个原因。...3) 在 Java 中,为了进入代码的临界区,线程需要锁定并等待锁,他们不知道哪些线程持有锁,只是知道锁被某个线程持有, 并且需要等待以取得锁, 不是去了解哪个线程在同步块内,并请求它们释放锁。

1.4K20

每天一道 python 面试题 - Python中的元类(metaclass) 详细版本

object at 0x89c6d4c> 但这并不是那么动态,因为您仍然必须自己编写整个类。...type是Python用于在幕后创建所有类的元类。 现在,您想知道为什么用小写不是小写Type? 好吧,我想这与str创建字符串对象int的类和创建整数对象的类的一致性有关。...请注意,该metaclass属性将不会被继承,父(Bar.class)的元类将被继承。如果Bar使用通过(不是)metaclass创建的属性,则子类将不会继承该行为。...但这不是适当的OOP。我们正在type直接致电,不是覆盖或致电父母的new。...但就其本身而言,它们很简单: 拦截class创建 修改class 返回修改后的类 为什么要使用元类类不是函数?

57900

每天一道 python 面试题 - Python中的元类(metaclass) 详细版本

object at 0x89c6d4c> 但这并不是那么动态,因为您仍然必须自己编写整个类。...type是Python用于在幕后创建所有类的元类。 现在,您想知道为什么用小写不是小写Type? 好吧,我想这与str创建字符串对象int的类和创建整数对象的类的一致性有关。...请注意,该__metaclass__属性将不会被继承,父(Bar.__class__)的元类将被继承。如果Bar使用通过(不是)__metaclass__创建的属性,则子类将不会继承该行为。...但这不是适当的OOP。我们正在type直接致电,不是覆盖或致电父母的__new__。...但就其本身而言,它们很简单: 拦截class创建 修改class 返回修改后的类 为什么要使用元类类不是函数?

40810

深入理解Python中的元类(metaclass)

pass … return Foo # 返回的是类,不是类的实例 … else: … class Bar(object): …...,不是类的实例 >>> print MyClass() # 你可以通过这个类创建类实例,也就是对象 <__main__.Foo object...type就是Python在背后用来创建所有类的元类。现在你想知道那为什么type会全部采用小写形式不是Type呢?...好吧,我猜这是为了和str保持一致性,str是用来创建字符串对象的类,int是用来创建整数对象的类。type就是创建类对象的类。你可以通过检查__class__属性来看到这一点。...但就元类本身而言,它们其实是很简单的: 1)   拦截类的创建 2)   修改类 3)   返回修改之后的类 五、为什么要用metaclass类不是函数?

41240

python metaclass 详细说明

type的完全不同的功能——type可以动态创建classtype()函数可以接收class的描述来作为参数并返回所生成的class object。...包括int, string, function, class在内,Python中所有的东西都是object所有的object都是被相应的class创造的。...但是metaclass本身是很简单的: 影响class初始化的过程 修改class的内容 返回修改过的class 为什么我们要使用metaclass,不是使用一些函数来实现类似的功能?...就像前文所说,__metaclass__实际上可以是任何callable,那么为什么我们还要使用metaclass不是直接调用这些函数呢?...这不是带着个class吗? 为什么我们要使用metaclass呢? 那么究竟为什么我们要使用metaclass这样一个难以理解且容易出错的实现方式呢?

53120

【python高级】元类的认识和基础用法

在python中,一切都是对象(object),类(class)也是对象(object),所以一个类(class)必定会有一个类型(type)。...(不是很准确,但这样好理解) 参数详解 type源码 class type(object): """ type(object_or_name, bases, dict) type...深入一下 经过上面的例子我们知道了,object是所有类的基类,type是创建类的类,那么我如果把基类修改了,是不是创建出来的类就是自动继承了我所修改后的基类?...class MyClass2(): # 类的定义 h = 123 print("呜呜呜,我就是一个普通的类,可我的元类不是type了,而是自定义的") aa = MyClass2...() print(aa.h) #输出结果如下>>> 呜呜呜,我就是一个普通的类,可我的元类不是type了,而是自定义的 123 用元类写一个简单的日志记录器 class LogMeta(type):

14820

比Python更牛的语言有吗?看我用元类(metaclass)花式创建Python类

(object): pass return Bar MyClass = choose_class('foo') print(MyClass) # 函数返回一个类...,不是一个类的实例 print(MyClass()) # 创建一个类实例 输出结果如下: .Foo object at 0x10e905438> 尽管这段代码可以根据choose_class函数的参数值返回不同的Python类,但这并不是动态的,因为仍然必须自己编写整个类。...type函数可以将类的描述作为参数,并返回一个类。 好吧,类型具有完全不同的能力,它也可以动态创建类。type可以将类的描述作为参数,并返回一个类。...所以type是一个类,不是一个普通的函数。 现在还有一个疑问,Python类的命名规则都是首字母大写,那么为什么type类是首字母小写呢?

79120

Python教程第7章 | 元类

class ,它的类型就是 type h 是一个实例,它的类型就是 com.twowater.hello.Hello。...其实 type() 函数不仅可以返回一个对象的类型,也可以创建出新的类型。 class 的定义是运行时动态创建的,创建 class 的方法就是使用 type() 函数。...type() 就是 Python 在背后用来创建所有类的元类。 那么现在我们也可以猜到一下为什么 type() 函数是 type 不是 Type呢?...发现打印出来的 class 都是 type 。 一开始也提到了,元类就是类的类。 也就是元类就是负责创建类的一种东西。 你也可以理解为,元类就是负责生成类的。 type 就是内建的元类。...__new__ 是在__init__之前被调用的特殊方法 # __new__是用来创建对象并返回之的方法 # __init__只是用来将传入的参数初始化给对象 # 你很少用到_

12310

Python type 和元类 metaclass

class type(name, bases, dict, **kwds) type 传入一个参数时,返回的是参数的类型。...= 1 X = type('X', (), dict(a=1)) 通过 metaclass 创建类 我们知道可以用 class 类来创建 object 对象, class 类本身也是对象,那么 class...= models.IntegerField() person = Person(name='bob', age='35') print(person.age) 当打印 person.age 时,并不是返回...以调用方式出现时,就是在调用class中定义的 __call__,如object() class以调用方式出现时,就是在调用metaclass中定义的 __call__,如class...() 这里就是当Spam()时,也就是实例化Spam时就会调用 这也就是为什么单例模式可以放在这里做的原因,目标类实例化时,必然会调用 __call__ 所以固定返回同一个实例

13310
领券