Python的进阶之道【AIoT阶段一(上)】(十五万字博文 保姆级讲解)—玩转Python语法(二):面向对象—不会吧不会吧,你居然还没有对象(2)(六)

简介: 玩转Python语法(二):面向对象

4.5 object类

🚩object类是所有类的父类,因此所有类都有object类的属性和方法。

class Student: # 默认继承 object 类
    pass
class Teacher(): # 默认继承 object 类
    pass
class headmaster(object):
    pass

内置函数dir()可以查看指定对象所有属性

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/1 9:02
# 欢迎大家关注AIoT相关博客~
class Student: # 默认继承 object 类
    pass
stu = Student()
print(dir(stu))

image.png

我们可以看到 object 类中其实有很多的属性以及方法,我们在之前其实已经介绍过了 __init__() 方法,这里我们介绍一下 object 中的 __str__() 方法,其他的方法和属性我们会在 4.7 特殊属性,4.8 特殊方法 中介绍。__str__() 方法用于返回一个对于“对象的描述”,对应于内置函数str()经常用于print()方法,帮我们查看对象的信息,所以我们经常会对 __str__() 进行重写,不重写 __str__() 方法输出的其实是对象的内存地址。

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/1 9:02
# 欢迎大家关注AIoT相关博客~
class Student: # 默认继承 object 类
    pass
stu = Student()
print(stu.__str__())

image.png

接下来我们去重写这个方法返回我们要的信息:

❗️ 注:下面的代码使用了 __init__() 方法,后续会有讲解,读者这里只需要知道 __init__() 的含义是把输入的值进行赋值即可(对创建的对象进行初始化)

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/1 9:02
# 欢迎大家关注AIoT相关博客~
class Student: # 默认继承 object 类
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def __str__(self):
        return '你好,我是{0},今年{1}岁'.format(self.name, self.age)
stu = Student('辰chen', 19)
print(stu.__str__())

image.png

这里额外补充一下:直接输出对象名的形式其实就是默认调用 __str__() 方法:

❗️ 注:下面的代码使用了 __init__() 方法,后续会有讲解,读者这里只需要知道 __init__() 的含义是把输入的值进行赋值即可(对创建的对象进行初始化)

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/1 9:02
# 欢迎大家关注AIoT相关博客~
class Student: # 默认继承 object 类
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def __str__(self):
        return '你好,我是{0},今年{1}岁'.format(self.name, self.age)
stu = Student('辰chen', 19)
print(stu)

image.png

4.6 多态的实现

🚩简单地说,多态就是“具有多种形态”,它指的是:即便不知道一个变量所引用的对象到底是什么类型,仍然可以通过这个变量调用方法,在运行过程中根据变量所引用对象的类型,动态决定调用哪个对象中的方法。

image.png

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/1 9:38
# 欢迎大家关注AIoT相关博客~
class Animal:
    def eat(self):
        print('动物会吃东西')
class Dog(Animal):
    def eat(self):
        print('狗会吃骨头')
class Cat(Animal):
    def eat(self):
        print('猫会吃鱼')
class Person:
    def eat(self):
        print('人会吃五谷杂粮')
# 类之外定义函数:
def fun(obj):
    obj.eat()
# 在调用 fun() 函数的时候,我们只关心传入的类是否具有 eat() 方法,而并不关心类之间的关系。
fun(Dog())
fun(Cat())
fun(Animal())
fun(Person())

image.png

静态语言与动态语言

静态语言实现多态的三个必要条件:

1.继承

2.方法重写

3.父类引用指向子类对象


动态语言的多态崇尚“鸭子类型”当看到一只鸟走起来像鸭子、游泳起来像鸭子、收起来也像鸭子,那么这只鸟就可以被称为鸭子。在鸭子类型中,不需要关心对象是什么类型,到底是不是鸭子,只关心对象的行为。


Python 就是动态语言,而 Java 就是静态语言


4.7 特殊属性

🚩部分特殊属性:

名称 描述
__dict__ 获得类对象或实例对象所绑定的所有属性和方法的字典序列
__class__ 获取对象所属的类
__bases__ 获取类的父类的元组序列
__base__ 获取类的基类(继承的第一个父类)
__mro__ 获取类的层次结构
__subclasses__ 获取子类的列表序列

这里直接用代码去演示,具体实现看备注和运行结果即可:

❗️ 注:下面的代码使用了 __init__() 方法,后续会有讲解,读者这里只需要知道 __init__() 的含义是把输入的值进行赋值即可(对创建的对象进行初始化)

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/1 10:48
# 欢迎大家关注AIoT相关博客~
#print(dir(object))
class A:
    pass
class B:
    pass
class C(A,B):
    def __init__(self, name,age):
        self.name = name
        self.age = age
class D(A):
    pass
#创建C类的对象
x = C('辰chen', 19)      # x是C类型的一个实例对象
print(x.__dict__)     # 实例对象的属性字典
print(C.__dict__)     # 类的属性字典
print('-----------------------------')
print(x.__class__)    # <class '__main__.C'> 输出了对象所属的类
print(C.__bases__)    # C类的父类类型的元组
print(C.__base__)     # 类的基类(哪个父类离得最近就输出哪个父类)
print(C.__mro__)      # 类的层次结构
print(A.__subclasses__())    # 子类的列表

image.png

4.8 特殊方法

🚩部分特殊方法:

名称 描述
__len__() 通过重写__len__()方法,让内置函数len()的参数可以是自定义类型
__add__() 通过重写__add__()方法,可使用自定义对象具有“+”功能
__new__() 用于创建对象
__init__() 对创建的对象进行初始化
__len__() 通过重写__len__()方法,让内置函数len()的参数可以是自定义类型

这里直接用代码去演示,具体实现看备注和运行结果即可:(__new__(),__init__() 会在下一小节中进行讲解)

❗️ 注:下面的代码使用了 __init__() 方法,后续会有讲解,读者这里只需要知道 __init__() 的含义是把输入的值进行赋值即可(对创建的对象进行初始化)

# 博主:辰chen
# 博客地址:https://chen-ac.blog.csdn.net/
# 开发时间:2022/1/1 11:10
# 欢迎大家关注AIoT相关博客~
a, b = 10, 20
c = a + b  # 两个整数类型的对象的相加操作
d = a.__add__(b) # '+'的底层实现
print(c)
print(d)
class Student:
    def __init__(self,name):
        self.name=name
    def __add__(self, other):
        return self.name+other.name
    def __len__(self):
        return len(self.name)
stu1=Student('辰chen')
stu2=Student('枭哥')
s = stu1 + stu2   #实现了两个对象的加法运算(因为在Student类中 编写__add__()特殊的方法)
print(s)
s = stu1.__add__(stu2)
print(s)
print('----------------------------------------')
lst = [1, 2, 3, 4]
print(len(lst))   # 调用内置函数 len() 计算列表的长度
print(lst.__len__())
print(len(stu1))  # 返回的是 stu1 的 name 长度

image.png


目录
相关文章
|
28天前
|
IDE 数据挖掘 开发工具
Python作为一种广受欢迎的高级编程语言,以其简洁的语法和强大的功能吸引了众多初学者和专业开发者
Python作为一种广受欢迎的高级编程语言,以其简洁的语法和强大的功能吸引了众多初学者和专业开发者
36 7
|
4天前
|
存储 数据处理 Python
Python如何显示对象的某个属性的所有值
本文介绍了如何在Python中使用`getattr`和`hasattr`函数来访问和检查对象的属性。通过这些工具,可以轻松遍历对象列表并提取特定属性的所有值,适用于数据处理和分析任务。示例包括获取对象列表中所有书籍的作者和检查动物对象的名称属性。
15 2
|
18天前
|
关系型数据库 开发者 Python
Python编程中的面向对象设计原则####
在本文中,我们将探讨Python编程中的面向对象设计原则。面向对象编程(OOP)是一种通过使用“对象”和“类”的概念来组织代码的方法。我们将介绍SOLID原则,包括单一职责原则、开放/封闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则有助于提高代码的可读性、可维护性和可扩展性。 ####
|
18天前
|
缓存 监控 算法
Python内存管理:掌握对象的生命周期与垃圾回收机制####
本文深入探讨了Python中的内存管理机制,特别是对象的生命周期和垃圾回收过程。通过理解引用计数、标记-清除及分代收集等核心概念,帮助开发者优化程序性能,避免内存泄漏。 ####
30 3
|
26天前
|
存储 索引 Python
Python 的基本语法
这些是 Python 的基本语法要素,掌握它们是学习和使用 Python 的基础。通过不断地实践和应用,你将能够更深入地理解和熟练运用这些语法知识,从而编写出高效、简洁的 Python 代码
56 5
|
29天前
|
存储 Python
Python编程入门:理解基础语法与编写简单程序
本文旨在为初学者提供一个关于如何开始使用Python编程语言的指南。我们将从安装Python环境开始,逐步介绍变量、数据类型、控制结构、函数和模块等基本概念。通过实例演示和练习,读者将学会如何编写简单的Python程序,并了解如何解决常见的编程问题。文章最后将提供一些资源,以供进一步学习和实践。
32 1
|
1月前
|
机器学习/深度学习 数据挖掘 开发者
Python编程入门:理解基础语法与编写第一个程序
【10月更文挑战第37天】本文旨在为初学者提供Python编程的初步了解,通过简明的语言和直观的例子,引导读者掌握Python的基础语法,并完成一个简单的程序。我们将从变量、数据类型到控制结构,逐步展开讲解,确保即使是编程新手也能轻松跟上。文章末尾附有完整代码示例,供读者参考和实践。
|
1月前
|
存储 Python Perl
python正则语法
本文介绍了正则表达式的基础知识及其在 Python 中的应用。首先解释了为什么要使用正则表达式,通过一个判断手机号的示例展示了正则表达式的简洁性。接着详细介绍了 `re` 模块的常用方法,如 `match()`、`search()`、`findall()`、`finditer()` 等,并讲解了正则表达式的基本语法,包括匹配单个字符、数字、锚字符和限定符等。最后,文章还探讨了正则表达式的高级特性,如分组、编译和贪婪与非贪婪模式。
24 2
|
人工智能 分布式计算 前端开发
3大阶段,30+教程,超全年度 Python 礼包大放送 | 技术日报(15期)
Python简单易懂,功能强大,同时也是大数据、人工智能时代的首选编程语言之一。这两年 Python 如破竹之势一般出现在开发者眼前,甚至有许多非技术人员也会想通过学习 Python 来提高自己的工作效率。这么火的语言,开发者社区当然要为你带来 “Python 学习大礼包” 了!
989 0
|
17天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
下一篇
DataWorks