继续前一章,探究下python的内建属性和方法。
print("".__class__)
print([].__class__)
print("".__class__.__base__)
print("".__class__.__base__.__class__)
print("".__class__.__base__.__base__)
class MyownClass():
def __init__(self):
self.name = "a"
print(MyownClass().__class__)
print(MyownClass().__class__.__base__)
print(object().__class__.__subclasses__)
def test():
print("hello")
print(test)
输出结果:
<class 'str'> # __class__ 类似于type()方法
<class 'list'>
<class 'object'> # __class__ 的基类是object
<class 'type'> # <class 'object'> 的类是type
None # object类的基类是空
<class '__main__.MyownClass'> # 我自己的类名
<class 'object'> # 我自己定义的类的基类也是object
<built-in method __subclasses__ of type object at 0x61A20AA8> # 提示是一个内建方法
<function test at 0x0049B660> # 我定义的函数
以上代码说明了以下几点知识:
- 所有类的最终的基类是object类。
__subclasses__
的不是一个内建属性,而是一个内建方法,所以应该使用__subclasses__()
方法
print(object().__class__.__subclasses__())
输出结果:
[<class 'type'>, <class 'weakref'>, <class 'weakcallableproxy'>, <class 'weakproxy'>, <class 'int'>, <class 'bytearray'>, <class 'bytes'>, <class 'list'>, <class 'NoneType'>, <class 'NotImplementedType'>, <class 'traceback'> ……
总体来说,像这些内建属性和内建方法以及type()这种函数都有助于我们理解代码本身,编程时我们经常会遇到一些字符,比如一个x,我们看到他并不知道这个变量到底是什么,是整型,还是列表,还是一个方法名,还是一个对象,是一个类,这时候我们就可以用以上的那个函数去了解这个字符所代表的真实含义。
当然这些内建属性、方法、函数也不止这一个作用,在其他地方,他肯定也有着别的作用,只不过现在我不知道。