第一章: Python中一切皆对象

2019-03-14  本文已影响0人  莫辜负自己的一世韶光

思维导图


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创建的内置类型

上一篇下一篇

猜你喜欢

热点阅读