python进阶中需要深入理解python中一切皆对象,只有理解python中一切皆对象后,才能在python编程中越走越远。

1.一切皆对象

python中一切皆对象,包括函数方法都是对象,但是函数和类比较高级,属于python中的一等公民,具有以下属性

一等公民具有属性:

函数和类赋值给一个变量

def hello():
    print("hello world")

class Person:
    def __init__(self):
        print("person")

h = hello
P1 = Person

h()
p1()

函数和类可以添加到集合对象中

def hello():
    print("hello world")

class Person:
    def __init__(self):
        print("person")
    
li = []
li.append(hello)
li.append(Person)

#执行
for item in li:
    item()

函数和类可以作为参数传递

def hello(fn):
    fn()

def test():
    print("我是一个测试函数")

class Person:
    def __init__(self):
        print("person")
#函数作为值传递    
hello(test)

#类作为值传递
hello(Person)

函数和类可以作为返回值

def test():
    print("test")

class Person:
    def __init__(self):
        print("person")


def hello():
    return test

def testClass():
    return Person

#函数作为返回值
hello()

#类作为返回值
testClass()

2.type、class、object三者关系

什么是对象?对象就是一个实体,如一张桌子,一把椅子等等,只要是一个具体的实物他就是一个对象。在理解对象后,接下来在理解typeclassobject三者之间的关系。

tpye

type有两种用法:

type()和isinstance()的区别:

type和class关系

a = 1
type(a)
>>> <class 'int'>
type(int)
>>> <class 'type'>

st = 'abc'
type(st)
>>> <class 'str'>
type(str)
>>> <class 'type'>

通过上面的例子,可以得出 type -> int -> 1也就是 type -> class -> obj(这个obj就是我们经常说的实例也就是一个具体的对象),我们可以验证下自己定义的类是不是满足

class Student:
    pass

stu = Student()
type(stu)
>>> <class '__main__.Student'>
type(Student)
>>> <class 'type'>

通过我们自定义student类发现也满足type -> class -> obj的关系。

class和object的关系

#python 2版本定义类
class Student(object):
    pass

#python 3版本定义类
class Student:
    pass

通过对比python2版本和python3版本中定义类,发现在python 3版本中如果不声明继承基类(也就是父类),则默认继承objec。下面我们来验证一下

print(int.__bases__)
>>> <class 'object'>
print(str.__bases__)
>>> <class 'object'>

#自定义类

class Person:
    pass

class Student(Person):
    pass

print(Person.__bases__)
>>> <class 'object'>

print(Student.__bases__)
>>> <class '__main__.Person'>

type和object的关系

type(type)
>>> <class 'type'>

type.__bases__
>>> (<class 'object'>,)

type(object)
>>> <class 'type'>

object.__bases__
>>> ()

通过上面例子,我们可以发现 type的类就是type,继承object。object的类也是type,无继承。object是python中最顶层的类,所有的类都继承于object

ssl

上面这张图我把它分为2部分,第一部分是用绿色框起来的,第二部分是用黄色线分开的。为了更好的理解这张图,我们先来看黄色线分开的这部分。

第二部分关系:abc 是 str的实例,str继承object, str是type实例,这部分理解起来比较容易,开头说过type的作用一种是生成类型,一种是返回对象的类型,在后面会详细介绍如何用type生成自定义的类

第一部分关系,type可以实例type, object 是type的实例,也就是type是python中用于生成实例的,type继承objec,object继承(),说明object是python最顶层的类。到这里小伙伴们应该理解了python一切皆对象这句话的含义了

3.python的内置类型

python中对象有三个特性,身份(在内存中的地址)、类型(类型)、

a = 1
id(a) 
>>> 1533568176 

type(a)
>>> <class 'int'>

#值
1

python中的内置类型:

ssl

python3.7 进阶

python 一切皆对象 python 魔法函数 python 类和对象 python Mixin python 自定义序列类 python dict python 对象引用、可变性和垃圾回收 python 元类编程