python求矩形面积_关于python:创建矩形类
我真的不太懂課程,任何幫助都會很好。
矩形類應具有以下私有數據屬性:
__length
__width
Rectangle類應該有一個創建這些屬性并將其初始化為1的__init__方法。它還應具有以下方法:
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
28class 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,而是要教你如何編寫Java代碼,而Python非常糟糕。我建議找一個更好的班級?;蛘?#xff0c;如果你需要這樣做的話,在老師教什么之前,找一個你可以實際學習的在線教程或課堂,這樣你就可以在不期望從中學習任何東西的情況下完成作業。
對AbnNet的完全正確的注釋做一點說明:Python不是Java,而你的指導者似乎不理解這一點,因此教給你壞的Python實踐。尤其是關于__的"dunder"變量,它們在Python中有特殊的含義,不適用于其他語言。有關dunder變量和python中的"privacy"的更多詳細信息,請參閱這個和這個。
python不限制對私有數據屬性的訪問,因此您很少像使用更嚴格的語言那樣編寫"getter"和"setter"(我們都是同意的成年人)。
除非它是供內部使用的(將來可能會更改的實現細節),否則您只需將該屬性向世界公開—因此更慣用的矩形將是:
1
2
3
4
5
6
7class 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代碼,下面是你的方法。
首先,要創建一個名為__length的屬性,只需為其分配與任何其他屬性相同的屬性:
1
2def __init__(self):
self.__length = 1
現在,要為該屬性編寫getter和setter,請執行相同的操作:
1
2
3
4
5def get_length(self):
return self.__length
def set_length(self, length):
self.__length = length
現在,get_area有點棘手,因為你沒有一個__area可以得到。(這是一個愚蠢的想法,因為它看起來像一個getter函數,即使它不是…)但是你知道如何計算一個矩形的面積:它只是長度乘以寬度,對嗎?
1
2def get_area(self):
return self.__length * self.__width
在整個任務中,__str__方法是唯一的好主意,盡管對于這樣的類,編寫一個沒有__repr__的__str__可能是一個壞主意。不管怎樣,這兩個方法都只是返回一個帶有一些有用對象表示的字符串。str對最終用戶應該是友好的,而repr對程序員(您或使用您的類的人)應該是有用的。例如:
1
2
3
4
5def __str__(self):
return '{} x {} rectangle'.format(self.__length, self.__width)
def __repr__(self):
return '{}({}, {})'.format(type(self).__name__, self.__length, self.__width)
我同意,這項任務的前提很奇怪。我理解他們試圖理解成員和方法的概念,但是他們讓這個類聞起來像C++。有時,這些學術問題以學習為幌子,伴隨著最奇怪的要求。
@賽博:通常情況下,當你看到這樣的任務時,并不是因為他們想表達的觀點。(除非這一點是"該死的管理員讓我在Python教書,我只是花了3年的時間學習如何教JAVA……好吧,我只是把我所有的課程材料從Java翻譯成Python,如果他們抱怨我要燒毀大樓……",如果你真的想教私人變量和吸氣劑。在python中,您首先要教@property(并給出一個最初不是計算的計算getter示例)。
"我只是把我所有的課程材料從Java翻譯成Python"我希望我能說我在工業界也沒有看到這一點:/Fortran代碼被翻譯成C++是我必須處理的。你可以有超過8個字符的變量名,使用實際的類,使用STL等。有些人是很好的程序員,不明白語法翻譯不等于成語翻譯。
@ Cyt:是的,C++中的FORTRAN代碼有時比Python中的Java代碼更煩人,因為最終在整個地方都會出現分段錯誤和漏洞,如果您只是編寫了習慣性C++,那么在運行時可以很容易地完成在運行時做的事情,更不用說性能問題了。我已經很久沒有處理過C++代碼了,很抱歉…
如果沒有集合和獲取函數,您可以做得非常好,并且在使用損壞的變量(如變量名)時應該更加小心,但是這里有一個不太出色的代碼來滿足您的需求。希望有幫助。
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
38class 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')
你的class有一些問題。見以下評論
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
27class 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
總結
以上是生活随笔為你收集整理的python求矩形面积_关于python:创建矩形类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dataframe修改数据_数据处理进阶
- 下一篇: qpython3h安装numpy_怎么装