python 面向对象编程(2)

简介: python 面向对象编程(2)

前言

前面我们介绍了 python 类和对象以及继承、私有权限,那么今天我们将来介绍 python面向对象 剩下的两大特性封装、多态,以及如何访问、修改类属性、类方法和静态方法的介绍。🚗🚗🚗

封装

Python中的封装是一种面向对象编程的概念,它将数据和操作这些数据的方法封装到一个单独的单元中,这个单元通常被称为类(Class)。封装的基本思想是将数据和相关的操作(方法)组合在一起,形成一个相对独立的、可复用的整体。

封装的目的是隐藏对象的内部实现细节,只向外部暴露一些必要的接口,通过这些接口来访问和操作对象的状态。这样做的好处是增强了代码的可读性和可维护性,同时也提高了代码的安全性。

我们在类中定义的属性和方法都可以看做是封装。

class Person():
    name = 'zhangsan'
    age = 18
    gender = 'man'
    def print_info(self):
        print(f'一位名叫{self.name}的{self.age}{self.gender}')

定义name、age、gender以及方法print_info都叫做封装。

多态

多态是一种可以根据不同的对象类型执行不同的操作的能力。它允许多个不同的对象对相同的消息作出响应,以各自独特的方式执行操作,从而实现了代码的灵活性和可扩展性。

在 Python 中,多态性是通过方法的动态绑定和方法重写来实现的。具体来说,当一个对象调用一个方法时,实际执行的是与对象类型相关联的方法。

python 的多态不是只能依赖于继承,但是最好依赖于继承。

python 多态的实现步骤:

  1. 定义父类,并提供公共方法
  2. 定义子类,并重写父类方法
  3. 传递子类对象给调用者,可以看到不同子类执行效果不同
class Animal():
    def speak(self):
        pass
class Cat(Animal):
    def speak(self):  # 重写父类方法来实现多态
        print('喵喵喵')
class Dog(Animal):
    def speak(self):  # 同样重写父类方法,实现多态
        print('汪汪汪')
cat = Cat()
dog = Dog()
cat.speak()  # 喵喵喵
dog.speak()  # 汪汪汪

我们通过继承自一个父类的实例对象来调用同一个方法而实现了不同的功能,这就是多态的灵活性。

类属性和实例属性

定义以及访问类属性

  • 类属性就是类对象所拥有的属性,它被该类的所有实例对象所共有
  • 类属性可以通过类对象或实例对象访问
class Person():
    name = 'zhangsan'
person1 = Person();
print(person1.name)  # 通过实例对象来访问类属性  zhangsan
print(Person.name)  # 通过类对象来访问类属性  zhangsan

修改类属性

修改类属性只能使用 类名.类属性 = 值 来修改类属性。

class Person():
    name = 'zhangsan'
person1 = Person();
Person.name = 'lisi'
print(Person.name)  # lisi
print(person1.name)  # lisi

那么如果我们要使用 实例对象.类属性 = 值 会出现什么情况呢?

class Person():
    name = 'zhangsan'
person1 = Person();
person1.name = 'lisi'
print(Person.name)  # zhangsan
print(person1.name)  # lisi

**如果我们使用 实例对象.类属性 = 值 实际上修改的是实例属性。

实例属性

实例属性其实是另外开辟了一份与类属性同名的一块内存,修改实例属性并不会影响类属性。

class Person():
    name = 'zhangsan'
person1 = Person()
person2 = Person()
print(person1.name)  # zhangsan
print(person2.name)  # zhangsan
person1.name = 'lisi'
print(person1.name)  # lisi
print(person2.name)  # zhangsan
person2.name = 'wangwu'
print(person1.name)  # lisi
print(person2.name)  # wangwu

  • 类的实例记录的某项数据始终保持一致时,则定义类属性。
  • 实例属性要求每个对象为其单独开辟一份内存空间来记录数据,而类属性为全类所共有,仅占用一份内存,更加节省内存空间。

类方法

在 Python 中,类方法是一种特殊类型的方法,它与类本身相关联而不是与实例(对象)相关联。类方法可以在不创建类实例的情况下访问和操作类的属性和方法。

要定义一个类方法,需要使用 @classmethod 装饰器,将其放置在方法定义的上方。类方法的第一个参数通常被命名为 cls,它表示对类本身的引用。通过这个参数,可以访问类的属性和调用其他类方法。

  • 当方法中需要使用类对象 (如访问私有类属性等)时,定义类方法
  • 类方法一般和类属性配合使用
class Account():
    Account_name = '1234567'
    __Account_password = '987654'
    @classmethod
    def get_password(cls):
        return cls.__Account_password
result1 = Account.get_password()
print(result1)  # 987654
account1 = Account()
result2 = account1.get_password()
print(result2)  # 987654

静态方法

在 Python 中,静态方法是一种与类相关联的方法,它不需要访问类的实例或实例的属性。静态方法可以在不创建类实例的情况下调用,它归属于类而不是对象。

要定义一个静态方法,需要使用 @staticmethod 装饰器,将其放置在方法定义的上方。静态方法没有特殊的参数,它们不会自动传递类或实例的引用。

class Person():
    @staticmethod
    def print_info():
        print('这是一个静态方法')
Person.print_info()  # 这是一个静态方法
person1 = Person()
person1.print_info()  # 这是一个静态方法


  • 静态方法能够通过实例例对象和类对象去访问
  • 当方法中 既不需要使用实例对象(如实例对象,实例属性),也不需要使用类对象 (如类属性、类方法、创建实例等)时,定义静态方法
  • 取消不需要的参数传递,有利于减少不不必要的内存占用和性能消耗


相关文章
|
3月前
|
Python
探索Python中的面向对象编程(OOP):从概念到实践
在计算机编程领域中,面向对象编程(OOP)是一种强大的范式,它能够提供更高层次的抽象和模块化,使代码更易于维护和扩展。本文将介绍Python中的面向对象编程概念,并通过实际示例展示如何在Python中应用OOP思想,实现代码的复用和可读性的提升。
|
3月前
|
数据安全/隐私保护 Python
Python中的面向对象编程:类与实例详解
Python中的面向对象编程:类与实例详解
27 1
|
1月前
|
Python
Python中的面向对象编程与继承
本文将深入探讨Python中面向对象编程的核心概念,重点讨论继承的实现原理以及在实际开发中的应用。通过详细的示例和解释,读者将能够全面理解Python中继承的使用方式和优势,为提高代码的复用性和可维护性提供有效的技术支持。
|
4天前
|
Python
Python从入门到精通:深入学习面向对象编程——2.1.2继承、封装和多态的概念
Python从入门到精通:深入学习面向对象编程——2.1.2继承、封装和多态的概念
|
21天前
|
Python
Python面向对象编程学习应用案例详解
面向对象编程在Python中通过类定义对象结构和行为。示例:1) 使用`class`关键字定义类,如`class Person`;2) `__init__`方法初始化对象属性,如`self.name`和`self.age`;3) 实例化对象,如`person1 = Person("张三", 25)`;4) 访问属性和方法,如`person1.name`;5) 定义类方法,如`def introduce(self)`;6) 调用方法,如`person1.introduce()`;7) 类继承,如`class Student(Person)`;8) 多态,通过继承重写方法实现。
9 1
|
1月前
|
Python
Python面向对象编程简介
Python面向对象编程简介
18 1
|
1月前
|
存储 机器学习/深度学习 数据安全/隐私保护
【Python 基础教程 24】全面入门Python面向对象编程:深度探索与实战教程
【Python 基础教程 24】全面入门Python面向对象编程:深度探索与实战教程
79 0
|
1月前
|
存储 Python
Python的面向对象编程(OOP)
Python的面向对象编程(OOP)
15 0
|
1月前
|
存储 Python
python面向对象编程
python面向对象编程
11 0
|
1月前
|
Python
Python中的面向对象编程:基础与实践
Python中的面向对象编程:基础与实践
11 0