Python中的属性与Getter和Setters

本文概述

  • 1.什么是getter和setter
  • 2.私有属性-封装
  • 3.财产
目录
  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 = 2a = 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 = 2a = property(__get_a, __set_a)

【Python中的属性与Getter和Setters】让我们检查一下它是否正常工作。
## creating an object for the 'AnotherWay' class obj = FinalClass(12)print(obj.a)

12

总结
现在, 你已经了解了如何在Python中实现封装以及setter, getter和属性之间的区别。
如果你不熟悉Python, 建议你参加srcmini的免费Python入门课程。
如果你对本文有任何疑问, 请在评论部分中提及。编码愉快!

    推荐阅读