思维导图
1. Python面向对象更加彻底,就是因为python里面一切都是对象,就连模块都是对象
函数和类也是对象,属于python的一等公民.那么该怎么解释这个一等公民呢?满足如下四个条件:
1>可以赋值给一个变量
2>可以当作参数传递给一函数
3>可以作为一个函数的返回值
4>可以作为元素添加到容器中
# encoding:utf-8
__author__ = 'Fioman'
__time__ = '2019/3/14 8:54'
"""
在Python中一切都是对象,函数和类也是对象,它们是python的一等公民.
1>可以赋值给一个变量
2>可以作为参数传递给一个函数
3>可以作为一个函数的返回值
4>可以添加到一个容器中
"""
def ask(name='Fioman'):
print(name)
class Person(object):
def __init__(self):
print('Class')
obj_list = []
obj_list.append(ask)
obj_list.append(Person)
for item in obj_list:
print(item())
# 打印结果Fioman None Class <__main__.Person object at 0x000001ABED8C34E0>
# 分析. 调用ask的时候,因为ask没有返回值,所以item()的结果是None.而因为item()相当于是
# 调用Person(),相当于是创建一个实例对象,返回值是一个Person的实例.
# 作为参数传递给一个函数
def print_type(item):
print(type(item))
print('****函数作为参数*****')
for item in obj_list:
print_type(item)
# 打印结果
# <class 'function'>
# <class 'type'>
print('函数作为返回值------------->')
def create_person(P,ask):
Person2 = P
my_ask = ask
return Person2,my_ask
print(create_person(Person,ask)[0](),create_person(Person,ask)[1]())
# 打印结果Class 和 Fioman 相当于是调用Person() 和 ask(). 注意返回的是一个元组
print('*' * 10)
my_func = ask # 函数可以赋值给一个变量
my_func()
print('*' * 10)
my_class = Person
my_class() # 类也可以赋值给一个变量来调用
2.type,object,class之间的关系
注意几点
1.type是python的一切的源头,python中所有的对象都是由type创建.
2.而之所以可以做到一切皆对象,是因为type本身也是它自己的对象.也就是说type(type) 的返回值还是'type'
3.Python中所有的类,如果没有显示的指定父类,都默认继承自object类.
4.object类是最顶层的类,但是它也是由type创建,并且type(object)的时候也是type
,但是object的父类是()空
5.python中一切都是对象,所以比较灵活,因为可以在程序运行的过程中更改对象的属性
# encoding:utf-8
__author__ = 'Fioman'
__time__ = '2019/3/14 9:23'
'''
type 和 object 以及class之间的关系
'''
class Student():
pass
def f():
pass
a = 1
s = 'abc'
lst = [1,2,3]
d = dict(x=1)
stu = Student()
print(type(a),type(s),type(lst))
# <class 'int'> <class 'str'> <class 'list'>
print(type(stu),type(Student))
# <class '__main__.Student'> <class 'type'>
# 所以stu实例对象是由Student类生成的,而类对象Student是由type生成的.
# 总结type -> int -> 1
# 总结type -> class -> obj
# 什么是object,object是最顶层基类,所有类如果没有显示的写明继承的父类
# 就会默认继承自object
print(Student.__bases__) # (<class 'object'>,)
print(type.__bases__) # (<class 'object'>,)
print(object.__bases__) # ()
print(type(object)) # <class 'type'>
print(type(type)) # <class 'type'>
3.Python创建的内置类型