个性化阅读
专注于IT技术分析

Python中的属性与Getter和Setters

本文概述

目录

  1. 什么是getter和setter
  2. 私有属性-封装
  3. 属性

1.什么是getter和setter

  • 吸气剂:-这些是面向对象编程(OOPS)中使用的方法, 该方法有助于从类中访问私有属性。
  • 设置器:-这些是OOPS功能中使用的方法, 可帮助将值设置为类中的私有属性。

2.私有属性-封装

如果你不熟悉Python中的私有属性或私有方法, 请阅读此srcmini文章。

让我们看看如何在Python中实现私有属性。

class SampleClass:

    def __init__(self, a):
        ## private varibale or property in Python
        self.__a = a

    ## getter method to get the properties using an object
    def get_a(self):
        return self.__a

    ## setter method to change the value 'a' using an object
    def set_a(self, a):
        self.__a = a

SampleClass具有三种方法。

__init __:-用于初始化类的属性。

  • __a:-这是一个私有属性。
  • get_a:-用于获取私有属性a的值。
  • set_a:-用于使用类的对象设置a的值。

你无法直接在Python中访问私有变量。这就是为什么你实现getter方法的原因。

让我们看看该类如何工作。

## creating an object
obj = SampleClass(10)

## getting the value of 'a' using get_a() method
print(obj.get_a())

## setting a new value to the 'a' using set_a() method
obj.set_a(45)

print(obj.get_a())
10
45

这是在Python中实现私有属性, 获取器和设置器的方式。 Java中遵循相同的过程。让我们以Pythonic方式编写相同的实现。

class PythonicWay:

    def __init__(self, a):
        self.a = a

你不需要任何获取器, 设置器方法即可访问或更改属性。你可以使用属性名称直接访问它。

让我们来看看。

## Creating an object for the 'PythonicWay' class
obj = PythonicWay(100)

print(obj.a)
100

上面两个类之间有什么区别。

  • SampleClass隐藏私有属性和方法。它实现了OOPS的封装功能。
  • PythonicWay不会隐藏数据。它没有实现任何封装功能。

有什么更好用的?

  • 这取决于我们的需要。如果需要私有属性和方法, 则可以使用setters, getters方法来实现类, 否则将使用常规方法来实现。

3.财产

现在, 如果你希望具有一些条件来设置SampleClass中的属性值, 该怎么办。

假设我们传递的值是偶数且为正, 则可以将其设置为属性, 否则将其设置为2。

让我们通过更改SampleClass中的set_a()方法来实现这一点。

class SampleClass1:

    def __init__(self, a):
        ## calling the set_a() method to set the value 'a' by checking certain conditions
        self.set_a(a)

    ## getter method to get the properties using an object
    def get_a(self):
        return self.__a

    ## setter method to change the value 'a' using an object
    def set_a(self, a):

        ## condition to check whether 'a' is suitable or not
        if a > 0 and a % 2 == 0:
            self.__a = a
        else:
            self.__a = 2

让我们通过创建一个对象来检查类。

## creating an object for the class 'SampleClass1'
obj = SampleClass1(16)

print(obj.get_a())
16

让我们看看如何使用@property装饰器实现上述类。

class Property:

    def __init__(self, var):
        ## initializing the attribute
        self.a = var

    @property
    def a(self):
        return self.__a

    ## the attribute name and the method name must be same which is used to set the value for the attribute
    @a.setter
    def a(self, var):
        if var > 0 and var % 2 == 0:
            self.__a = var
        else:
            self.__a = 2

@property用于获取私有属性的值, 而不使用任何getter方法。我们必须在返回私有变量的方法前加一行@property。

要设置私有变量的值, 我们在方法前面使用@ method_name.setter。我们必须将其用作设置器。

让我们测试Property类, 以检查装饰器是否正常工作。

## creating an object for the class 'Property'
obj = Property(23)

print(obj.a)
2

@ a.setter将通过检查方法中提到的条件来设置a的值。使用该属性的另一种方法是…

class AnotherWay:

    def __init__(self, var):
        ## calling the set_a() method to set the value 'a' by checking certain conditions
        self.set_a(var)

    ## getter method to get the properties using an object
    def get_a(self):
        return self.__a

    ## setter method to change the value 'a' using an object
    def set_a
    (self, var):

        ## condition to check whether var is suitable or not
        if var > 0 and var % 2 == 0:
            self.__a = var
        else:
            self.__a = 2

    a = property(get_a, set_a)

将所有getter和setter方法传递给该属性, 并将其分配给必须用作类属性的变量。

## creating an object for the 'AnotherWay' class
obj = AnotherWay(28)

print(obj.a)
28

将setter和getter方法设为私有以隐藏它们。我们开始做吧。

class FinalClass:

    def __init__(self, var):
        ## calling the set_a() method to set the value 'a' by checking certain conditions
        self.__set_a(var)

    ## getter method to get the properties using an object
    def __get_a(self):
        return self.__a

    ## setter method to change the value 'a' using an object
    def __set_a(self, var):

        ## condition to check whether var is suitable or not
        if var > 0 and var % 2 == 0:
            self.__a = var
        else:
            self.__a = 2

    a = property(__get_a, __set_a)

让我们检查一下它是否正常工作。

## creating an object for the 'AnotherWay' class
obj = FinalClass(12)

print(obj.a)
12

总结

现在, 你已经了解了如何在Python中实现封装以及setter, getter和属性之间的区别。

如果你不熟悉Python, 建议你参加srcmini的免费Python入门课程。

如果你对本文有任何疑问, 请在评论部分中提及。编码愉快!

赞(0)
未经允许不得转载:srcmini » Python中的属性与Getter和Setters

评论 抢沙发

评论前必须登录!