34 Python封装(私有变量、getter、setter、静态方法)

 欢迎来到@一夜看尽长安花 博客,您的点赞和收藏是我持续发文的动力

对于文章中出现的任何错误请大家批评指出,一定及时修改。有任何想要讨论的问题可联系我:3329759426@qq.com 。发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。

    专栏:

文章概述:对Python封装的介绍

关键词:Python封装

本文目录

Python封装

封装(Encapsulation)

静态方法(Static Methods)

1. 属性装饰器 @property

2. 属性 setter 方法

定义静态方法

总结:

  

Python封装

封装(Encapsulation)

封装是面向对象编程的重要概念,它指的是将数据(属性)和操作数据的方法(方法)捆绑在一起,以保护数据不受外部直接访问和修改,而是通过类的方法来间接访问和修改数据。

静态方法(Static Methods)

静态方法属于类而不是实例,因此可以通过类名直接调用,无需创建类的实例。它通常用于那些不需要访问实例或类状态的方法。

class Person:
    def __init__(self, name, age, gender):
    
        # 私有变量,添加两个下划线
        self.__name = name
        self.__age = age
        self.__gender = gender
        
#添加注解,表示是属性(getter 方法)
    @property
    def Name(self):
        return self.__name

#添加注解,两个函数的名字相同(在Python中两个函数如果名字相同的话,
#那么后面那个函数就会将前面的定义的函数替换掉)添加注解方法名加.setter
#使用者封装的优势就体现出来了,可以对输入的值进行进一步的检测,符合的才允许修改
    @Name.setter
    def Name(self, value):
        if value == 'Bob':
            pass
        else:
            self.__name = value

#静态方法也是加注释就行了,静态方法的优势就是可以不用实例化对象就可以直接用类名加方法名的方式直接调用
#这种静态方法不需要像其他动态方法一样,还需要传入self
    @staticmethod
    def mymethod():
        print("Hello World")

Person.mymethod()

#实例化对象:
p1 = Person('yasaka', 18, 'male')
#由于添加了属性(getter)注释,可以把这个Name函数直接当成属性使用,用类名加.属性的方式调用
print(p1.Name)

#将返回的'yasaka'替换成 'Bob'
p1.Name = 'Bob'
print(p1.Name)


#如果不添加这种setter方法直接用赋值的方法,那么就相当于将current_name这个指针的方向指向了Bob
# current_name = p1.Name()
# current_name = 'Bob'
# print(current_name)
# print(p1.Name())

# p1.name = 'Bob'
# print(p1.name)


#静态方法的运用
class MathOperations:
    @staticmethod
    def add(a, b):
        return a + b

    @staticmethod
    def subtract(a, b):
        return a - b

    @staticmethod
    def multiply(a, b):
        return a * b

    @staticmethod
    def divide(a, b):
        if b == 0:
            raise ValueError("Cannot divide by zero")
        return a / b

# 调用静态方法,无需实例化类
print(MathOperations.add(10, 5))       # 输出: 15
print(MathOperations.subtract(10, 5))  # 输出: 5
print(MathOperations.multiply(10, 5))  # 输出: 50
print(MathOperations.divide(10, 5))    # 输出: 2.0

1. 属性装饰器 @property
@property
def Name(self):
    return self.__name
  • 作用:将 Name 方法转换为一个属性,使得可以通过 p1.Name 的形式来访问 __name 的值。
  • 优势:在外部代码中,可以将方法调用的方式转换为属性访问的方式,更符合面向对象编程的习惯,并提高了代码的可读性。
2. 属性 setter 方法
@Name.setter
def Name(self, value):
    if value == 'Bob':
        pass
    else:
        self.__name = value
  • 作用:通过 @Name.setter 装饰器,定义了一个 setter 方法,用于设置 Name 属性的值。
  • 优势:可以在设置属性值时进行额外的逻辑判断或处理。在这个例子中,如果尝试设置 Name 属性为 'Bob' 以外的值,会将 __name 的值修改为新的值。

定义静态方法
@staticmethod
def mymethod():
    print("Hello World")
  • 作用:定义了一个静态方法 mymethod,它与类相关联,而不是与实例相关联。
  • 优势:可以在不创建类的实例的情况下,直接使用类名调用这个方法。这样的方法对于那些不需要访问实例属性或类属性的独立功能非常有用。

总结:

  • 属性封装:通过 @property@Name.setter 实现对 Person 类的 Name 属性的封装,控制了对 __name 的访问和修改方式,增强了代码的安全性和可维护性。
  • 静态方法:在 MathOperations 类中定义了几个静态方法,可以直接通过类名调用,而不需要创建类的实例。这种方式适用于那些独立于类实例状态,但与类相关联的功能。
  • 25
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值