本章节首先对比静态语言以及动态语言,而后介绍 python 中最底层也是面向对象最重要的几个概念-object、type和class之间的关系,以此来引出在python如何作到一切皆对象、随后列举python中的常见对象。
Python的面向对象更完全,Java和C++中基础类型并非对象。在Python中,函数和类也是对象,属于Python的一等公民。
对象
具备以下4个特征
下面从四个特征角度分别举例说明函数和类也是对象
python
类能够赋值给一个变量
class Person: def __init__(self, name="lsg"): print(name) if __name__ == '__main__': my_class = Person # 类赋值给一个变量 my_class() # 输出lsg,变量直接调用就能够实例化一个类,知足上面的特征1,这里显然说明类也是一个对象 my_class("haha") # 输出haha
函数能够赋值给一个变量
def func_test(name='lsg'): print(name) if __name__ == '__main__': my_func = func_test my_func("haha") # 输出haha,对变量的操做就是对函数的操做,等效于对象的赋值,知足上面的特征1,说明函数是对象。
class Person: def __init__(self, name="lsg"): print(name) def func_test(name='lsg'): print(name) if __name__ == '__main__': obj_list = [func_test, Person] print(obj_list) # 输出[<function func_test at 0x0000025856A2C1E0>, <class '__main__.Person'>]
class Person: def __init__(self, name="lsg"): print(name) def func_test(name='lsg'): print(name) def print_type(obj): print(type(obj)) if __name__ == '__main__': print_type(func_test) print_type(Person)
输出以下函数
<class 'function'> <class 'type'>
能够明显地看出类和函数都是对象spa
class Person: def __init__(self, name="lsg"): print(name) def func_test(name='lsg'): print(name) def decorator_func(): print("pre function") return func_test def decorator_class(): print("pre class") return Person if __name__ == '__main__': decorator_func()() # 返回的右值做为函数能够直接调用 decorator_class()() # 返回的右值做为类能够直接实例化
代码举例以下, 能够得出三者的关系是type --> class --> objcode
a = 1 print(type(a)) # <class 'int'> print(type(int)) # <class 'type'>
b = 'abc' print(type(b)) # <class 'str'> print(type(str)) # <class 'type'>
class Student: pass stu = Student() print(type(stu)) # <class '__main__.Student'> print(type(Student)) # <class 'type'>
c = [1, 2] print(type(c)) # <class 'list'> print(type(list)) # <class 'type'>
总结图:对象
对象的三个特征:身份、内存和值
身份:在内存中的地址,能够用id(变量)
函数来查看blog
常见的内置类型以下ip
以下代码,两个值为None的变量地址彻底相同,可见None是全局惟一的
a = None b = None print(id(a)) print(id(b)) print(id(a) == id(b))