Python创建Getter和Setter的方法详解
作者:迹忆客
面向对象编程(OOP)是一种编程范式,它使很多事情变得容易,从可组合性到继承,并允许我们更快地构建功能和程序部件。 这个范式有不同的特点; 两个是 getter 和 setter。
类是 OOP 的基础,通常具有每个实例唯一的变量,并且这些变量(通常称为属性)通过方法设置或获取。 这些方法称为 getter 和 setter。
这些行为在支持 OOP 的编程语言中很流行,Python 也支持它。 本文将讨论如何在 Python 中创建 getter 和 setter。
Python 中的 Getter 和 Setter
Getters 和 Setters 是帮助我们设置类变量或属性而无需直接访问的方法,违背了抽象和封装的目的。 因此,通过 getter 和 setter,我们就能够处理类属性。
在我们创建 getter 和 setter 之前,重要的是要知道,与其他编程语言不同,Python 没有隐藏字段,因此您可以通过点表示法直接访问类中的变量。
我们可以使用普通函数、property() 函数和 @property 装饰器来实现 getter 和 setter。
在 Python 中使用函数创建 Getter 和 Setter
称为方法的典型类函数对于创建 getter 和 setter 非常有用,我们可以使用 self 概念轻松地设置它们。
该方法为 getter 返回属性,对于 setter,该方法将参数绑定到属性。 为了进行演示,我们将使用一个拥有位置属性的 Employee、名为 getPosition 的 getter 方法和名为 setPosition 的 setter 方法。
class Employee: def __init__(self) -> None: self.position = None def getPosition(self): return self.position def setPosition(self, position): self.position = position Jacob = Employee() Jinku = Employee() Jacob.setPosition("Engineer II") Jinku.setPosition("Senior Engineer") print(Jacob.position) print(Jinku.getPosition())
输出:
Engineer II
Senior Engineer
但是,这种设置或方法没有太多特殊行为。
在Python中使用property()函数创建Getter和Setter
为了获得一些特殊的行为,我们可以使用 property() 函数来创建并返回一个属性对象,该对象包含三个方法:getter() 、setter() 和 delete()。
它有助于提供实例属性的接口。 此功能使我们能够轻松创建所有 getter 和 setter 功能。
要使用 property() 函数,我们需要设置四个参数值,它们是使 property() 成为高阶函数的函数。
getter、setter 和 delete 方法是它的参数(都是可选的),并且它返回属性对象。
property(fget, fset, fdel, doc)
让我们在 OOP 代码中使用 property() 函数。
class Employee: def __init__(self): self.position = None def getPosition(self): return self.position def setPosition(self, position): self.position = position pos = property(getPosition, setPosition) Jacob = Employee() Jinku = Employee() Jacob.position = "Engineer II" Jinku.position = "Senior Engineer" print(Jacob.position) print(Jinku.position)
输出:
Engineer II
Senior Engineer
随着 property() 函数的引入,我们有了 pos 绑定,它保存属性对象,有助于保持对私有属性的安全访问。
使用@property装饰器在Python中创建Getter和Setter
我们可以使用 @property 装饰器来实现 property() 函数,这样就不需要在我们的方法中使用 get 和 set 名称了。
使用 @property 装饰器,我们可以重用定义 getter 和 setter 函数的位置名称。
使用 @property,我们创建 getter,使用 @position.setter,我们创建 setter,这通过添加到代码中并在输出中可见的 print 语句显而易见。
class Employee: def __init__(self): self.position = None @property def position(self): print("Get Employee Position: ") return self._position @position.setter def position(self, value): print("Set Position") self._position = value Jacob = Employee() Jinku = Employee() Jacob.position = "Engineer II" Jinku.position = "Senior Engineer" print(Jacob.position) print(Jinku.position)
输出:
Set Position
Set Position
Set Position
Set Position
Get Employee Position:
Engineer II
Get Employee Position:
Senior Engineer
Set Position 有四种,因为 __init__ 方法在调用类实例时设置了初始位置属性,从而导致了前两种。 当我们将值设置为接下来两个的相应值时,它会再次打印。
对于getter,它在获取属性值时打印语句Get Employee Position,并且getter只被调用两次。 于是就有了这两种说法。
当我们使用 setter 方法时,我们可以向 OOP 代码添加验证。
class Employee: def __init__(self): self.position = None @property def position(self): print("Get Employee Position: ") return self._position @position.setter def position(self, value): print("Set Position") if (value != None and len(value) <= 2): raise ValueError("Position name is less than two and is deemed invalid") self._position = value Jacob = Employee() Jinku = Employee() Jacob.position = "OS" Jinku.position = "Senior Engineer" print(Jacob.position) print(Jinku.position)
输出:
Set Position
Set Position
Set Position
Traceback (most recent call last):
File "c:\Users\akinl\Documents\Python\getterSetter.py", line 20, in <module>
Jacob.position = "OS"
File "c:\Users\akinl\Documents\Python\getterSetter.py", line 14, in position
raise ValueError("Position name is less than two and is deemed invalid")
ValueError: Position name is less than two and is deemed invalid
到此这篇关于Python创建Getter和Setter的方法详解的文章就介绍到这了,更多相关python创建Getter和Setter内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!