1、函数和类是对象,是Python中的一级公民

(1)将函数和类赋值给一个变量

将函数或类赋值给一个变量,就可以把该变量当成函数或类来使用

 def ask(name):
print(name)
class Person:
def __init__(self):
print("hello bobby")
print("-----函数赋值给变量-------")
my_func = ask
# 变量当成函数使用
my_func("bobby")
print("---------类赋值给变量-----")
my_class = Person
# 变量当成类使用
# 类实例化即会调用初始化函数
my_class()

(2)可以将对象(函数和类)添加到集合对象中

def ask(name="bobby"):
print(name)
class Person:
def __init__(self):
print("hello bobby")
print("-----函数和类可以添加到集合对象中去---")
obj_list = []
obj_list.append(ask)
obj_list.append(Person)
for item in obj_list:
#打印函数和类中的东西,并且打印它们返回的东西
print(item())
'''
输出结果
bobby
None---ask()函数没有返回值,故函数返回None
hello bobby
<__main__.Person object at 0x0219F8D0>-----类的返回(实际是init函数的返回),Person()实例化后返回一个对象(函数返回对象)
'''

(3)补充实例:函数可以返回None,可以返回一个对象,也可以返回一个函数(装饰器实现原理)

def ask(name="bobby"):
print(name)
print("-----函数可以返回一个函数---")
def decorator_func():
print("我是一个函数")
return ask
my_ask = decorator_func()
my_ask("Tom")
'''
输出结果
我是一个函数
Tom
'''

(4)函数和类可以作为参数传递给函数

def ask(name="bobby"):
print("传递一个函数")
class Person:
def __init__(self):
print("传递一个类")
print("---函数和类可以作为参数传递给函数---")
def chuandi(content):
content()
# 传递函数
chuandi(ask)
# 传递类
chuandi(Person)
'''
输出结果
传递一个函数
传递一个类
'''

(5)函数和类可以当作函数的返回值

def ask(name="bobby"):
print(name)
class Person:
def __init__(self):
print("返回一个类")
print("-----函数可以返回一个函数和类---")
def decorator_func():
print("我是一个函数")
return ask
my_ask = decorator_func()
my_ask("返回一个函数")
def decorator_func1():
print("我是一个函数")
return Person
my_person = decorator_func1()
my_person()
'''
输出结果
我是一个函数
返回一个函数
我是一个函数
返回一个类
'''

2、type、object和class的关系

(1)type->class->obj

类(class)是由type类生成的一个对象,平时所熟悉的对象obj是由类(class)对象创建的一个对象

type两种用法:一,生成一个类;二,返回一个对象的类型

(1.1)返回对象的类型

1是一个int类的对象,类本身也是一个对象,由type(int)知,int是type类的对象,因此生成过程是type->int->1

abc是str类的对象,类本身也是一个对象,由type(str)知,str是type类的对象,因此生成过程是type->str->abc

自己创建的类也符合该逻辑,type生成类对象(内置的类或自定义的类),类对象产生实例

(2)object是所有类都要继承的最顶层的一个基础类

__base__查看类的基类

(3)type也是一个类,同时type也是一个对象

type的基类也是object

object是所有类的基类,类同时也是对象,由type(object)知object是由type生成的

object之上,没有基类

(4)type、class、object关系图

(4.1)内部类以及自定义类默认继承object,object是所有类的一个基类,type也继承它

(4.2)object是type的实例,list等所有的内置类和自定义类都是由type创建的,type创建了所有对象(函数和类等)。如,list是一个类,它也是一个对象的原因在于,它是由type创建的,所以类也是对象(设计原因:类加载到内存后不能修改,而对象则能随时修改,比较方便)

(4.3)object是type的实例,type继承了object,type也是type自身的实例,其他都是type的实例,故一切皆对象

object是所有类的基类,所有的类最终往上追溯都继承它,object继承为空

type既是一个类又是一个对象,所有的类往上追溯都是由type创建的,包括它自己

最新文章

  1. 【转】tomcat7性能调优
  2. Final-阶段站立会议5
  3. Drainage Ditches
  4. PDA调用WCF服务引用
  5. 编程之美2.5:寻找最大的K个数
  6. 点分十进制IP校验、转换,掩码校验
  7. Eliza Doolittle lyrics Big City
  8. PS纯手式打造不规则颜色的规则方块—学习教程
  9. 鼠标点击 input,显示瞬间的边框颜色,对之修改与隐藏
  10. 恢复SQLSERVER被误删除的数据(转)
  11. 第一章 自定义MVC框架
  12. js判断时间段
  13. CMDB资产管理系统开发【day26】:linux客户端开发
  14. Docker 搭建私有仓库
  15. linux服务之apache篇(一)
  16. oracle随机数(转)
  17. Python Singleton模式
  18. --HTML标签1
  19. Jquery教你写一个简单的轮播.
  20. 一些ios牛人的博客

热门文章

  1. jQuery的 ready() 和原生 Js onload() 的主要区别:
  2. clusterware启动顺序——CSS
  3. jsonp实现ajax跨域
  4. 下载MNIST数据集脚本input_data源码
  5. pycharm环境下用Python+Django开发web搭建
  6. Python开发环境-Pyenv安装使用
  7. XShell转发数据库端口
  8. 2018-计算机系机试(第二批)-D-最小差值
  9. golang struct
  10. 【转】vs2017快捷键大全