Python property() 函数



Python property() 函数用于在 getter 和 setter 等其他方法的帮助下创建和管理类的属性。如果你不想显式使用 property() 函数,你可以使用它的 @property 装饰器。

在面向对象的编程语言(如 Python)中,getter 和 setter 用于数据封装。在这里,封装意味着捆绑属性和方法以限制它们的直接访问。

此方法是内置函数之一,不需要导入任何模块。

语法

以下是 Python property() 函数的语法 -


 property(getter, setter, deleter, doc)

参数

Python property() 函数接受以下参数 -

  • getter − 它表示用于获取属性值的 getter 方法。
  • setter − 此参数表示用于设置属性值的 setter 方法。
  • deleter − 此参数指定用于删除属性值的 deleter 方法。
  • doc − 它指定一个包含属性的文档字符串的字符串。

返回值

Python property() 函数返回指定 getter、setter 和 deleter 的 property 属性。

property() 函数示例

练习以下示例来理解 Python 中 property() 函数的使用:

示例:使用 property() 函数

下面的代码演示了如何使用 property() 函数来获取、设置和删除给定类的属性属性。为此,我们创建了 getter、setter 和 deleter 方法。[延伸阅读: Python - 装饰器]


class Metal:
	 	def __init__(self, metalName):
	 	 	 self._metalName = metalName

	 	def get_metal(self):
	 	 	 print("Getting Metal Name")
	 	 	 return self._metalName

	 	def set_metal(self, name):
	 	 	 print("Setting Metal Name to:" + name)
	 	 	 self._metalName = name

	 	def del_metal(self):
	 	 	 print("Deleting Metal Name")
	 	 	 del self._metalName

	 	metalName = property(get_metal, set_metal, del_metal)

metal = Metal("Gold")
print(metal.metalName)
metal.metalName = "Silver"
del metal.metalName

上述代码的输出如下 -

Getting Metal Name
Gold
Setting Metal Name to:Silver
Deleting Metal Name

示例:使用 @property 装饰器创建只读属性

以下示例显示了 Python property() 函数的基本用法。在这里,我们在 @property 装饰器的帮助下创建一个简单的只读属性。


class Flight:
	 	def __init__(self, jetEngine):
	 	 	 self._jetEngine = jetEngine

	 	@property
	 	def jetEngine(self):
	 	 	 return self._jetEngine
	 	 	 		
myFlight = Flight(121)
print("Getting the attribute value of class:")
print(myFlight.jetEngine)

当我们运行上述程序时,它会产生以下结果——

Getting the attribute value of class:
121

示例:使用@property的 Getter & Setter 函数

如果我们不想显式调用 property() 函数,我们需要使用 @property 装饰器。在下面的代码中,我们将创建一个 getter 来获取属性,并添加一个 setter 函数来修改属性。


class Flight:
	 	def __init__(self, model):
	 	 	 self._model = model

	 	@property
	 	def model(self):
	 	 	 return self._model

	 	@model.setter
	 	def model(self, modelVal):
	 	 	 if modelVal >= 0:
	 	 	 	 	self._model = modelVal
	 	 	 else:
	 	 	 	 	raise ValueError("Model value must be non-negative")
	 	 	 	 	 		
myFlight = Flight(1210012)
print("Setting the model number of Flight using setter:")
print(myFlight.model)

以下是上述代码的输出 -

Setting the model number of Flight using setter:
1210012