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 'int'>

<class 'type'>

class Person:
pass
student = Person()
print(type(student))
print(type(Person))

result:

<class 'main.Person'>

<class 'type'>

print(type(type))

result:

<class 'type'>

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

object

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

class Person:
pass
class Student(Person):
pass
print(Student.bases)
print(Person.bases)
print(int.bases)
print(object.bases)

result:

(<class 'main.Person'>,)

(<class 'object'>,)

(<class 'object'>,)

()

print(type.bases)
print(type(object)

result:

(<class 'object'>,)

<class 'type'>

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

总结
python入门系列:Python中一切皆对象
常见的内置类型

None

全局只有一个
就是内存中的某一块区域
数值

int
float
complex
bool
迭代类型

序列类型

list
tuple
range
str
映射类型

dict
集合类型

set
frozenset
上下文管理类型

with
其他

模块类型
class 和实例
函数类型
方法类型
代码类型
object
type
...
小结

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

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

猜你喜欢

转载自blog.51cto.com/14186420/2349810
今日推荐