python入门系列:Python中一切皆对象

引言

Java语言也是面向对象的语言,但是Python要更加彻底

Python的面向对象特性,是它使用起来灵活的根本所在

对象的特点

可以赋值给一个变量

# 函数也是对象

def test(name):

print(name)

my_func = test # 注意 只写函数名 和 函数名加括号 的区别

my_func("MetaTian") # 打印:MetaTian

可以添加到集合中去

def plus(a, b):

print(a+b)

def minus(a, b):

print(a-b)

fun_list = []

fun_list.append(plus)

fun_list.append(minus)

for item in fun_list:

item(2, 1)

# result:

# 3

# 1

可以作为参数传递给函数

def plus(a, b):

print(a+b)

def calculate(method, a, b):

method(a, b)

calculate(plus, 1, 2)

# result:

# 3

可以当做函数的返回值

# 这也是装饰器的原理

def inner():

print("MetaTian")

def deco():

print("decorating...")

return inner

my_func = deco()

my_func()

# result:

# decorating...

# MetaTian

对象的3个属性

身份:在内存中的地址是多少,可用id()函数查看

类型:是什么类型的对象,可用type()函数查看

值:对象中的内容是什么

type object和class的关系

type和class

关系:type -> class -> obj,obj是我们平时使用的对象,它由class对象生成,可以是我们自定义的类,也可以是内建的类。上面说了,一切皆对象,class也是以type为模板,生成的对象。

type()函数,当传入一个参数时,返回对象的类型。传入三个参数时,用来生成一个类。具体的参数情况和使用方式可以查阅官方文档:docs.python.org/3/library/functions.html#type

print(type(1))

print(type(int))

# result:

#

#

class Person:

pass

student = Person()

print(type(student))

print(type(Person))

# result:

#

#

print(type(type))

# result:

#

type是以它自己为类生成的一个对象。如果熟悉静态语言,这似乎并不好理解,但是对动态语言来说就是这么自然。

object

object是最根本的一个基类,如果自己定义的类没有显示地去继承某一个类,则它会自动继承object。上面讨论的是类和对象之间的关系,现在要讨论的是类和类之间的关系。

class Person:

pass

class Student(Person):

pass

print(Student.__bases__)

print(Person.__bases__)

print(int.__bases__)

print(object.__bases__)

# result:

# (,)

# (,)

# (,)

# ()

print(type.__bases__)

print(type(object)

# result:

# (,)

#

type是一个类,它继承的是object,object作为一个对象又是以type为类型生成的。

总结

常见的内置类型

None

全局只有一个

就是内存中的某一块区域

数值

int

float

complex

bool

迭代类型

序列类型

list

tuple

range

str

映射类型

dict

集合类型

set

frozenset

上下文管理类型

with

其他

模块类型

class 和实例

函数类型

方法类型

代码类型

object

type

...

小结

综合上面的几点讨论,可以看到Python和其他的静态语言是大不相同。一切皆对象的设计思想,让Python程序的编写异常灵活,但是相比静态语言,它也丢失了一定的严谨性,有很多错误,我们只能够在代码的运行过程中才能发现。但这些动态语言的通病并未影响我们开发效率的提升。

注:喜欢python + qun:839383765 可以获取Python各类免费最新入门学习资料!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190216A0BL1800?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券