【发布时间】:2020-07-28 04:56:39
【问题描述】:
我创建了一个具有多个属性的类。我想将一个函数用于 getter 方法,将第二个函数用于 setter 方法。
class person:
def __init__(self, fname, lname, city, state):
# make all attributes as private
self._fname = fname
self._lname = lname
self._city = city
self._state = state
@property # get method
def fname(self):
return self._fname
@fname.setter # set method
def fname(self,fname):
self._fname = fname
@property
def lname(self):
return self._lname
@lname.setter
def lname(self,lname):
self._lname = lname
@property
def city(self):
return self._city
@city.setter
def city(self, city):
self._city = city
@property
def state(self):
return self._state
@state.setter
def state(self, state):
self._state = state
一种get方法和一种set方法如何使用所有属性?
例如:
def get(self):
return self._attr
def set(self,value):
self._attr = value
【问题讨论】:
-
你可以写一个自定义的descriptor,然后做例如
city = my_descriptor('_city')。这是我之前评论过的一个:codereview.stackexchange.com/q/98892/32391。但在这个例子中,这些东西都是属性没有意义,因为 getter 和 setter 不做任何事情。 -
拥有计算属性的要点是当您不需要它们时不必编写 getter/setter - 在您的示例中绝对不需要它们。所以只需删除所有这些属性,改用普通的公共属性(这将在功能上 100% 等效,没有描述符和方法调用的开销),如果/当你发现你需要为一个添加一些有效的 getter/setter给定属性,把它(和它单独)变成一个属性(或任何自定义描述符)。
标签: python-3.x oop getter-setter python-class