1.Python中一切皆对象
(1)可以赋值给一个变量
函数也是一个对象,可以赋值给一个变量。
def ask(name="bobby"):
print(name)
my_func = ask
my_func("bobby")
输出结果
bobby
类也是对象
class Person:
def __init__(self):
print('bobby')
my_class = Person
my_class()
输出结果
bobby
(2)可以添加到集合对象中
def ask(name="bobby"):
print(name)
class Person:
def __init__(self):
print('bobby1')
obj_list = []
obj_list.append(ask)
obj_list.append(Person)
for item in obj_list:
print(item())
输出结果
bobby #调用ask函数
None #没有返回值,默认输出None
bobby1 #调用__init__
<__main__.Person object at 0x000002122D9676D8>
(3)可以当做函数的返回值
def ask(name="bobby"):
print(name)
def decorator_func():
print("dec start")
return ask
my_ask = decorator_func()
my_ask("tom")
输出结果
dec start
tom
2.type、object和class的关系
type有两个作用,一是返回对象类型,生成一个对象
a = 1
b = "abc"
print(type(1))
print(type(int))
print(type(b))
print(type(str))
输出结果
<class 'int'>
<class 'type'>
<class 'str'>
<class 'type'>
从上面代码可以看出三者之间的关系:
- type->int -> 1
- type -> class -> obj
class Student:
pass
class MyStudent(Student):
pass
stu = Student()
print(type(stu))
print(type(Student))
print(int.__bases__)
print(str.__bases__)
print(Student.__bases__)
print(MyStudent.__bases__)
print(type.__bases__)
print(object.__bases__)
print(type(object))
输出结果
<class '__main__.Student'>
<class 'type'>
(<class 'object'>,)
(<class 'object'>,)
(<class 'object'>,)
(<class '__main__.Student'>,)
(<class 'object'>,)
()
<class 'type'>
从上面的代码可以看到:
- type也是一个类,同时type也是一个对象
- type和object互相指向对方
- object是最顶层的类
三者关系图示:
list、str、dict、tuple都继承自object,而这些都是type的实例,"abc"是str的实例。type继承自object,而object又是type的实例,两者相互指向,type自身是自身的实例,也就是自己实例化自己,它连自己都可以实例化,因此它也可以实例化其他类型。