本帖最后由 阿奇_o 于 2021-9-12 16:31 编辑
- In [1]: type?
- Init signature: type(self, /, *args, **kwargs)
- Docstring:
- type(object_or_name, bases, dict)
- type(object) -> the object's type
- type(name, bases, dict) -> a new type
- Type: type
- Subclasses: ABCMeta, EnumMeta, _TemplateMetaclass, MetaHasDescriptors, PyCStructType, UnionType, PyCPointerType, PyCArrayType, PyCSimpleType, PyCFuncPtrType, ...
- type() 用两种用法:
- 1. 传入的第一个参数,若为对象,则返回该对象所属的类
- 2. 传入的第一个参数,若为字符串名称,且第二、三个参数的正确传入,则生成一个新的 以该字符串为名的类
复制代码
嗯,真要展开讲的话,基本可以写一篇小作文了,因为基本上涉及了Python的核心的核心,
比如 变量(名)与对象的关系, 比如 "Python里一切都是对象",连"类"也是,所以你执行 id(A) 也返回一个唯一的"对象地址"。。
所以,type() 返回的是"类",其实也是"对象",从这个角度看,在Python里真正的类,其实只有 type 这"元类"(Metaclass)
参考:https://stackoverflow.com/questions/100003/what-are-metaclasses-in-python
而 __main__ 则 涉及"作用域",
以及Python(动态脚本语言)和Java,C,C++等静态编译语言,之间的不同:
Java等其他语言,都有一个"程序入口"(main函数), 而Python没有统一的"程序入口",
它是从上往下一条条命令执行的——最外层/顶层的代码都会"被解释"(随后被执行),
为了解决"入口的问题" 或者说 为了能够"选择性地执行和调用",就有了 if __name__ == "__main__" 这样的条件判断……
所以呢,
type(A) 或 print(A) 返回 <class '__main__.A'> 就是表示 A 是 该脚本的全局顶层(或交互环境下的顶层)的一个 "类(对象)"。
而 a = A() ; print(a) 的返回 <__main__.A object at 0x0000019D52E475C8> 则 代表 a 是 顶层作用域 里一个叫 A的类 的一个"实例(对象)"。
嗯。。就这样吧,"话题太高端",多说也口干,哈哈哈