: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中的intstrdict等都是对象,甚至你所常见的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的关系是非常容易理解的,这里面最难理解的就是typeobject的关系,而且这涉及了后续元编程相关内容

  • type是所有对象(甚至是自己)的“造物主”
  • 像list、str这些类型被视为对象之后,这意味着它的修改是极其方便的。而不像C++/Java那样,在程序运行时,类已经被编译好了,所以修改起来十分复杂

三:Python内置类型

(1)对象的三个特征

一个对象具有如下三个特征

  • 身份:也即地址,是该对象在内存中存放的地址。可以通过函数id(object)获取
  • 类型:例如intstrdict

(2)Python中常见的内置类型

①:None:Python解释器启动时会自动生成一个None对象,全局只有一个

  • 如下,对象ab被赋值为了None,由于None全局只有一个,所以ab的地址是相同的
a = None
b = None
if id(a) == id(b):
    print("a和b地址相同")
else:
    print("a和b地址不相同")

②:数值类型

  • int
  • float
  • complex
  • bool

③:迭代类型

  • 迭代器部分详细介绍

④:序列类型

  • list
  • bytesbytearraymemoryview
  • range
  • tuple
  • str
  • array

⑤:映射(dict

⑥:集合

  • set
  • frozenset

⑦:上下文管理类型(with

⑧:其他

  • 模块类型
  • class和实例
  • 函数类型
  • 方法类型
  • 代码类型
  • object对象
  • type类型
  • ellipsis类型
  • notimplemented类对象

以上是关于:Python面向对象深刻认识的主要内容,如果未能解决你的问题,请参考以下文章

我对面向对象的深刻理解

Python第三周之面向对象之深刻学习

Python面向对象_初步认识

面向对象设计与构造第二次总结作业

Python面向对象编程02:深度认识类class

Python面向对象编程02:深度认识类class