:Python面向对象深刻认识
Posted 快乐江湖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了:Python面向对象深刻认识相关的知识,希望对你有一定的参考价值。
文章目录
一:Python是一门彻底的面向对象语言
总的来说,Java和Python各自都是一门纯面向对象语言,但是Python要比Java的面向对象更加彻底,这也直接导致Python具有很强的灵活性
- 动态语言和静态语言的区别就体现在面向对象是否彻底
在Python中,函数和类也是对象(第三章会重点讲解),是Pthon的“一等公民”,具体表现为
- 可以赋值给一个变量
- 可以添加到集合对象中
- 可以作为参数传递给函数(这也就是为什么Python中函数可以作为参数)
- 可以作为函数的返回值(这也就是为什么Python中函数的返回值也可以是函数)
例如
def test(x=1):
return x**2
class Test:
def __init__(self):
print("Class is being instantiated")
# 可以赋值给一个变量
my_func = test
my_class = Test
print(my_func(10))
my_class()
print("-"*20)
# 可以添加到集合对象中
list1 = [test, Test]
for i in list1:
print(i())
print("-"*20)
# 可以作为函数的返回值
def decorator_test():
print("decorator_test running now!")
return test # 注意这里不要写test()等形式,因为这样不是返回对象地址,而是调用
my_test = decorator_test()
print(my_test(2))
print("-"*20)
二:type、object和class
(1)type-元类
在Python中,type()
函数的使用此时也是比较多的,主要用它来判断一个对象的类型,如下
class Student:
pass
a = [1, 2, 3]
b ='2': "sad", 'c': a, 'b': 123
student = Student()
print(type(1))
print(type("test"))
print(type(a))
print(type(b))
print(type(student))
上面我们说过,Python中一切皆对象。这意味着类也是对象,当然这听起来有些怪怪的,但事实确实如此。Python中的int
、str
、dict
等都是对象,甚至你所常见的Student
类也是对象,他们本质都是type类实例化后的对象,这个type
我们称其为元类
如下是Python中关于type
类的定义
即然type
是一个类,那么如type(int)
、type(list)
等操作其实就是在创建类
- 类本身不过是一个名为
type
类的实例。在 Python世界中,type
这个类就是造物的上帝 - 用户自定义类,只不过是
type
类的__call__
运算符重载
class Student:
pass
print(type(list))
print(type(int))
print(type(set))
print(type(Student))
(2)object
和Java一样,在Python中,object
类是所有类的基类,其他所有类都继承自基类 不过需要注意:
type
也是类,所以type
的基类也是object
- 虽然
object
是基类,但是在Python类也是对象,所以object
也是type
类型
print(int.__base__) # 查看基类
print(object.__base__)
print(type.__base__)
print(type(object))
(3)type、object和class的关系
object和class的关系是非常容易理解的,这里面最难理解的就是type
和object
的关系,而且这涉及了后续元编程相关内容
type
是所有对象(甚至是自己)的“造物主”- 像list、str这些类型被视为对象之后,这意味着它的修改是极其方便的。而不像C++/Java那样,在程序运行时,类已经被编译好了,所以修改起来十分复杂
三:Python内置类型
- 注意: 关于Python中类型学习属于Python基础知识,这里不做过多介绍,详细内容可见【Python基础教程】专栏说明及学习建议
(1)对象的三个特征
一个对象具有如下三个特征
- 身份:也即地址,是该对象在内存中存放的地址。可以通过函数
id(object)
获取 - 类型:例如
int
、str
、dict
等 - 值:
(2)Python中常见的内置类型
①:None:Python解释器启动时会自动生成一个None
对象,全局只有一个
- 如下,对象
a
和b
被赋值为了None
,由于None
全局只有一个,所以a
和b
的地址是相同的
a = None
b = None
if id(a) == id(b):
print("a和b地址相同")
else:
print("a和b地址不相同")
②:数值类型:
int
float
complex
bool
③:迭代类型:
- 迭代器部分详细介绍
④:序列类型:
list
bytes
、bytearray
、memoryview
range
tuple
str
array
⑤:映射(dict
):
⑥:集合:
set
frozenset
⑦:上下文管理类型(with
):
⑧:其他:
- 模块类型
class
和实例- 函数类型
- 方法类型
- 代码类型
object
对象type
类型ellipsis
类型notimplemented
类对象
以上是关于:Python面向对象深刻认识的主要内容,如果未能解决你的问题,请参考以下文章