前言
以前自学Python的时候很多都是大概浏览一下,进阶教程也有看过一些但是都是粗浅略过由于当时也是刚刚入门懵懵懂懂的。现在在运用一些框架的时候,只知道依葫芦画瓢却不知其意,现在准备自己在回顾一下Python高级编程,写写博客跟大家分享分享。
概述
本文由四个部分组成:
python中一切皆是对象
type、object和class的关系
python中的常见内置类型
总结
python中一切皆是对象
函数和类也是对象,属于python的一等公民
那么什么是一等公民:
- 赋值给一个变量
- 可以添加到集合对象中
- 可以作为参数传递给函数
- 可以当做函数的返回值
1. 赋值给一个变量
例子1:
def ask(name="hello"):
print(name)
# 函数赋值给一个变量
my_func = ask
my_func('hello')
结果:
hello
例子2:
class Person:
def __init__(self):
print('hello2')
# 类赋值给一个变量
my_class = Person
my_class()
结果:
hello2
由例子说明函数和类都是对象
2. 可以添加到集合对象中
def ask(name="hello"):
print(name)
class Person:
def __init__(self):
print('hello2')
object_list = []
object_list.append(ask)
object_list.append(Person)
for item in object_list:
print(item())
结果:
hello # 调用ask 输出
None # ask没有return所以为 None
hello2 # 调用 Person
<__main__.Person object at 0x000001E57B8A2688> # Pseron 实例化返回一个类对象
3.可以作为参数传递给函数
object_list = []
object_list.append(ask)
object_list.append(Person)
def print_type(item):
print(type(item))
for item in obj_list:
print_type(item)
结果:
<class 'function'>
<class 'type'>
4. 可以当做函数的返回值
一个函数可以返回另一个函数
装饰器实现原理
def decorator_func():
print('dec start')
return ask
my_ask = decorator_func()
my_ask('tom')
结果:
dec start # decorator_func打印
tom # 根据传递参数由 ask返回
type、object和class的关系
这部分主要是为了进一步理解python一切皆对象
Type和Object
-
type为对象的顶点,所有对象都创建自type。
-
object为类继承的顶点,所有类都继承自object。
-
python中万物皆对象,一个python对象可能拥有两个属性,class 和 base,class 表示这个对象是谁创建的,base 表示一个类的父类是谁。
>>> object.__class__
<class 'type'>
>>> type.__base__
<class 'object'>
>>>
上面例子得出:
- type类继承自object
- object的对象创建自type
以下为更详细说明:
a=1
b="abc"
print(type(1))
print(type(int))
class Student:
pass
stu = Student()
print(type(stu))
print(type(Student))
print(int.__bases__)
print(str.__bases__)
print(Student.__bases__)
print(type.__bases__)
print(object.__bases__)
print(type(object))
print(type(type))
结果:
<class 'int'> # 1是由int这个类创建的实例
<class 'type'> # int这个类是由type这个类创建的实例
<class '__main__.Student'> # int是由type这个类创建的实例
<class 'type'> # stu是类Student创建的实例
(<class 'object'>,) # 类int的基类是object这个类
(<class 'object'>,) # 同上
(<class 'object'>,) # 同上
(<class 'object'>,) # 重点:类type的基类也是object这个基类
() # 重点:类object没有基类
<class 'type'> # 难点:类object是由类type创建的实例
<class 'type'> # 难点:类type是由type类自身创建的实例
type->int->1
type->class->obj
由例子可以得出type生成int,int生成1
type生成类,类生成obj
object是所有类都继承的顶层基础类
type 可以生成一个类或返回对象类型
类由type生成的对象
type是一个类,也是一个对象
- object是一切对象:list、str、dict、tuple的基类,同时object是type的实例
- 类type是自身的实例,同时type也继承自object类
- 由结论1和结论2,
得出一切皆对象,同时一切皆继承自object类
python中的常见内置类型
对象的三个特征: 身份、类型、值
- None(全局只有一个)
- 数值:int、float、complex(复数)、bool
- 迭代类型
- 序列类型:list、{bytes、bytearray、memoryview(二进制序列)}、range、tuple、str、array
- 映射(dict)
- 集合:set、frozenset
- 上下文管理类型(with)
- 其他(了解):模块类型:class和实例、函数类型、方法类型、代码类型、object对象、type类型、ellipsis类型、notimplemented类型
>>> a=1
>>> id(a)
140712501092752 # 内存地址=身份
>>>
身份就是对象在内存中的地址
对象都是有类型的
值就是例子中的1
总结
本文目的是了解Python中的一切皆对象
为下文做铺垫 更新中~~~~~