2024-10-01 22:35:41 发布
网友
如果我有以下课程:
class theater: def __init__(self): self.__seatMatrix=[10]*5 self.__seats=seating[0] self.__rows=len(seating)
如何实现get/setter来更新seats的值? 这个想法是座位=[10]*5,5排10个座位。 整个周末我都在想这个。 当我尝试时:
def getseats(self): self.__seats
它不返回任何东西。你知道吗
/安迪
您可以使用属性包装座椅的getter/setter对:
@property def seats(self): return self.__seats # As Jarret pointed out, don't forget the return value @seats.setter def seats(self, value): self.__seats = value
或者可以实现__getitem__和__setitem__,将对象视为一个座位列表:
__getitem__
__setitem__
def __getitem__(self, index): return self.__seats[index] def __setitem__(self, index, value): self.__seats[index] = value
不要忘记函数实现中的return语句。与其他一些语言不同,Python不会自动返回在函数中计算的最后一个表达式。没有return语句的函数的返回值是None。你知道吗
return
None
在这种情况下,getseats()方法应该是:
getseats()
def getseats(self): return self.__seats
另外,如果您想将类中的某些变量指定为半私有(我说半私有是因为完全私有的变量实际上并不存在),Python中的约定是使用一个下划线(因此self._seats而不是self.__seats)。以双下划线为前缀的实例变量实际上会破坏名称,试图将其指定为private,这可能会产生令人惊讶的结果,如果这不是您想要的。你知道吗
self._seats
self.__seats
python文档对此进行了最好的解释:http://docs.python.org/tutorial/classes.html#private-variables
如前所述,不要使用双引线下划线,除非确定需要。这不是Java,您不必有私有类成员。也就是说,这不是你有问题的原因,这是缺乏回报声明,因为有人比我更敏锐的眼睛看到。你知道吗
总之,下面是如何在Python中实现它:
class Theater: self __init__(self, seating) self.seating = seating self.seats = seating[0] self.rows = len(seating)
完成。请注意,完全缺乏getter和setter,您不需要它们。不要试图对自己隐藏数据。无论如何,你不能
>>> class Theater: ... def __init__(self, data): ... self.__private_data = data ... >>> t = Theater("Private data") >>> t._Theater__private_data 'Private data'
哦,我想反正也没那么私人。Python没有私有成员。这是而不是Java。你知道吗
您可以使用属性包装座椅的getter/setter对:
或者可以实现
__getitem__
和__setitem__
,将对象视为一个座位列表:不要忘记函数实现中的return语句。与其他一些语言不同,Python不会自动返回在函数中计算的最后一个表达式。没有
return
语句的函数的返回值是None
。你知道吗在这种情况下,
getseats()
方法应该是:另外,如果您想将类中的某些变量指定为半私有(我说半私有是因为完全私有的变量实际上并不存在),Python中的约定是使用一个下划线(因此
self._seats
而不是self.__seats
)。以双下划线为前缀的实例变量实际上会破坏名称,试图将其指定为private,这可能会产生令人惊讶的结果,如果这不是您想要的。你知道吗python文档对此进行了最好的解释:http://docs.python.org/tutorial/classes.html#private-variables
如前所述,不要使用双引线下划线,除非确定需要。这不是Java,您不必有私有类成员。也就是说,这不是你有问题的原因,这是缺乏回报声明,因为有人比我更敏锐的眼睛看到。你知道吗
总之,下面是如何在Python中实现它:
完成。请注意,完全缺乏getter和setter,您不需要它们。不要试图对自己隐藏数据。无论如何,你不能
哦,我想反正也没那么私人。Python没有私有成员。这是而不是Java。你知道吗
相关问题 更多 >
编程相关推荐