Creating a Rectangle class
我真的不太懂课程,任何帮助都会很好。
矩形类应具有以下私有数据属性:
__length __width
Rectangle类应该有一个创建这些属性并将其初始化为1的
set_length —此方法为__length 字段赋值。set_width —此方法为__width 字段赋值。get_length —此方法返回__length 字段的值。get_width —此方法返回__width 字段的值。get_area —此方法返回矩形的面积__str__ —此方法返回对象的状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | class Rectangle: def __init__(self): self.set_length = 1 self.set_width = 1 self.get_length = 1 self.get_width = 1 self.get_area = 1 def get_area(self): self.get_area = self.get_width * self.get_length return self.get_area def main(): my_rect = Rectangle() my_rect.set_length(4) my_rect.set_width(2) print('The length is',my_rect.get_length()) print('The width is', my_rect.get_width()) print('The area is',my_rect.get_area()) print(my_rect) input('press enter to continue') |
python不限制对私有数据属性的访问,因此您很少像使用更严格的语言那样编写"getter"和"setter"(我们都是同意的成年人)。
除非它是供内部使用的(将来可能会更改的实现细节),否则您只需将该属性向世界公开—因此更惯用的矩形将是:
1 2 3 4 5 6 7 | class Rectangle(object): def __init__(self, width=1, height=1): self.width = width self.height = height @property def area(self): return self.width * self.height |
然后:
1 2 3 4 5 6 | >>> r = Rectangle(5, 10) >>> r.area 50 >>> r.width = 100 >>> r.area 1000 |
当然,您可以使用getter和setter编写rectancle类,但只有当您想验证或转换输入时才这样做-然后您可能想了解有关@property decorator的更多信息。
首先,这个任务是一个非常糟糕的主意。在Python中,您几乎不需要"private"属性、getter和setter函数,而任何教您这样做的人都会将您引入歧途。
但是,如果你只是想通过任务,而不是学习如何编写合适的Python代码,下面是你的方法。
首先,要创建一个名为
1 2 | def __init__(self): self.__length = 1 |
现在,要为该属性编写getter和setter,请执行相同的操作:
1 2 3 4 5 | def get_length(self): return self.__length def set_length(self, length): self.__length = length |
现在,
1 2 | def get_area(self): return self.__length * self.__width |
在整个任务中,
1 2 3 4 5 | def __str__(self): return '{} x {} rectangle'.format(self.__length, self.__width) def __repr__(self): return '{}({}, {})'.format(type(self).__name__, self.__length, self.__width) |
如果没有集合和获取函数,您可以做得非常好,并且在使用损坏的变量(如变量名)时应该更加小心,但是这里有一个不太出色的代码来满足您的需求。希望有帮助。
ps:python 2.7格式的打印语句。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | class Rectangle(): def __init__(self): self.__length = 1.0 self.__width = 1.0 def __str__(self): return"This is class Rectangle" def set_length(self,len=1.0): #len=1 --> default value self.__length = len def set_width(self,wid=1.0): #wid=1 --> default value self.__width = wid def get_length(self): return self.__length def get_width(self): return self.__width def get_area(self): return self.get_width() * self.get_length() if __name__ == '__main__': my_rect = Rectangle() my_rect.set_length(4.0) my_rect.set_width(2.0) print"The length is", my_rect.get_length() print"The width is ", my_rect.get_width() print"The area is ", my_rect.get_area() print my_rect raw_input('Press enter to continue') |
你的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | class Rectangle: # Init function def __init__(self): # The only members are length and width self.length = 1 self.width = 1 # Setters def set_width(self, width): self.width = width def set_length(self, length): self.length = length # Getters def get_width(self): return self.width def get_length(self): return self.length def get_area(self): return self.length * self.width # String representation def __str__(self): return 'length = {}, width = {}'.format(self.length, self.width) |
测试课程
1 2 3 4 5 6 7 8 9 10 11 | >>> a = Rectangle() >>> a.set_width(3) >>> a.set_length(5) >>> a.get_width() 3 >>> a.get_length() 5 >>> a.get_area() 15 >>> print(a) length = 5, width = 3 |
正如其他人所指出的,在Python中,setter和getter是多余的,因为所有成员变量都是公共的。我知道这些方法对你的任务是必需的,但是在将来,你要知道你可以省去麻烦,直接访问成员。
1 2 3 4 5 | >>> a.length # Instead of the getter 5 >>> a.length = 2 # Instead of the setter >>> a.length 2 |