[Python]多态、类方法、类属性

简介: [Python]多态、类方法、类属性

0ad12318824d46be857ac838f3fadf69.jpg

前言

系列文章目录

[Python]目录

视频及资料和课件

链接:https://pan.baidu.com/s/1LCv_qyWslwB-MYw56fjbDg?pwd=1234

提取码:1234


目标

  1. 面向对象三大特性
  2. 类属性和实例属性
  3. 类方法和静态方法

1 面向对象三大特性

  • 封装
  • 将属性和⽅法书写到类的⾥⾯的操作即为封装
  • 封装可以为属性和⽅法添加私有权限
  • 继承
  • ⼦类默认继承⽗类的所有属性和⽅法
  • ⼦类可以重写⽗类属性和⽅法(子类的属性和方法与父类同名)
  • 多态
  • 传⼊不同的对象,产⽣不同的结果

2 多态

2.1 了解多态

多态指的是一类事物有多种形态,一个抽象类有多个子类,因而多态的概念依赖于继承(Python的多态不是必须依赖于继承,但是最好依赖于继承)。

多态的定义:

多态是一种使用对象的方式,子类重写父类方法,调用不同子类创建出来的对象的相同父类方法,可以产生不同的执行结果

多态的好处:

(1)调用灵活;

(2)有了多态,更容易编写出通用的代码,作出通用的编程,以适应需求的不断变化。

多态实现的步骤

(1)定义父类,并提供公共方法。

(2)定义子类,并重写父类方法。

(3)传递子类对象给调用者,可以看到不同子类执行效果不同。

2.2 体验多态

需要实现的需求:

警察在办案时,在不同的情景下可能需要不同种类的警犬的协助,不同的警犬有不同的能力,如:追击毒品、追击敌人等等。

# (1)定义父类,并提供公共方法。
class Dog(object):
    def work(self):
        pass
# (2)定义子类,并重写父类方法。
class ArmyDog(Dog):
    def work(self):
        print('追击敌人......')
class DrugDog(Dog):
    def work(self):
        print('追击毒品......')
# 定义 Person 类调用 Dog 类的方法
class Police(object):
    def work_with_dog(self, dog):
        dog.work()
ad = ArmyDog()
dd = DrugDog()
daqiu = Police()
# (3)传递子类对象给调用者,可以看到不同子类执行效果不同。
daqiu.work_with_dog(ad)
daqiu.work_with_dog(dd)

3 类属性和实例属性

3.1 类属性

3.1.1 设置和访问类属性

类属性就是所拥有的属性,类属性被该类的所有实例对象所共有

类属性可以使用类或实例对象访问

class Dog(object):
    # 设置类属性
    tooth = 10
# 实例对象
dog1 = Dog()
dog2 = Dog()
# 通过类访问类属性
print(Dog.tooth)
print(dog1.tooth)
print(dog2.tooth)

类属性的优点:

(1)记录的某项数据始终保持一致,则定义类属性

(2)实例属性要求每个对象为其单独开辟一份空间来记录数据,而类属性为全类所共有,只占用一份内存,更加的节省空间

3.1.2 修改类属性

类属性只能通过类对象修改,不能通过实例对象修改,如果通过实例对象修改类属性,表示的是创建了一个实例属性。

class Dog(object):
    # 设置类属性
    tooth = 10
# 实例对象
dog1 = Dog()
dog2 = Dog()
# 通过类修改类属性
Dog.tooth = 20
# 通过类访问类属性
print(Dog.tooth)
print(dog1.tooth)
print(dog2.tooth)
print()
# 修改实例对象 dog2 的实例属性
# 在实例对象 dog2 上创建了一个与类属性同名的实例属性
dog2.tooth = 10
print(Dog.tooth)
print(dog1.tooth)
print(dog2.tooth)

4 类方法和静态方法

4.1 类方法

4.1.1 类方法特点

类方法需要使用装饰器@classmethod 来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以 cls 作为第一个参数。

4.1.2 类方法的使用场景

  1. 方法中需要使用类对象(如访问私有类属性等)时,定义类方法。
  2. 类方法一般和类属性配合使用
class Dog(object):
    # 私有类属性
    __tooth = 10
    # 类方法,获取私有类属性 tooth 的值
    @classmethod
    def get_tooth(cls):
        return cls.__tooth
dog = Dog()
dog_tooth = dog.get_tooth()
print(dog_tooth)

4.2 静态方法

4.2.1 静态方法特点

  1. 静态方法需要通过装饰器 @staticmethod 来进行修饰,静态方法既不需要传递类对象也不需要传递实例对象(形参没有self / cls)。
  2. 静态方法也能够通过实例对象和类对象访问

4.2.2 静态方法使用场景

  1. 当方法中既不需要使用实例对象(实例对象、实例属性)也不需要使用类对象(类属性、类方法、创建实例对象等)时,定义静态方法。
  2. 取消不需要的参数传递,有利于减少不必要的内存占用和性能消耗。
class Dog(object):
    @staticmethod
    def info_print():
        print('该类为 Dog,可以用于实例化 Dog 对象...')
dog = Dog()
dog.info_print()
Dog.info_print()



相关文章
WK
|
19天前
|
Python
Python中format_map()方法
在Python中,`format_map()`方法用于使用字典格式化字符串。它接受一个字典作为参数,用字典中的键值对替换字符串中的占位符。此方法适用于从字典动态获取值的场景,尤其在处理大量替换值时更为清晰和方便。
WK
66 36
|
30天前
|
机器学习/深度学习 数据采集 数据挖掘
11种经典时间序列预测方法:理论、Python实现与应用
本文将总结11种经典的时间序列预测方法,并提供它们在Python中的实现示例。
63 2
11种经典时间序列预测方法:理论、Python实现与应用
|
26天前
|
开发者 Python
Python中的魔法方法与运算符重载
在Python的奇妙世界里,魔法方法(Magic Methods)和运算符重载(Operator Overloading)是两个强大的特性,它们允许开发者以更自然、更直观的方式操作对象。本文将深入探讨这些概念,并通过实例展示如何利用它们来增强代码的可读性和表达力。
|
1月前
|
索引 Python
python-类属性操作
【10月更文挑战第11天】 python类属性操作列举
16 1
|
1月前
|
Java C++ Python
Python基础---类
【10月更文挑战第10天】Python类的定义
21 2
|
Python
Python基础-多态的开闭原则
人的一生,会遇到各种各样的人和事,对于一些不如意的人和事,要学会放弃。
|
Python
Python基础(十六):多态
.封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中
160 0
Python基础(十六):多态
|
3天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
3天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
3天前
|
存储 Python
Python编程入门:打造你的第一个程序
【10月更文挑战第39天】在数字时代的浪潮中,掌握编程技能如同掌握了一门新时代的语言。本文将引导你步入Python编程的奇妙世界,从零基础出发,一步步构建你的第一个程序。我们将探索编程的基本概念,通过简单示例理解变量、数据类型和控制结构,最终实现一个简单的猜数字游戏。这不仅是一段代码的旅程,更是逻辑思维和问题解决能力的锻炼之旅。准备好了吗?让我们开始吧!