我真的不太懂课程,任何帮助都会很好。

矩形类应具有以下私有数据属性:

__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非常糟糕。我建议找一个更好的班级。或者,如果你需要这样做的话,在老师教什么之前,找一个你可以实际学习的在线教程或课堂,这样你就可以在不期望从中学习任何东西的情况下完成作业。

对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:创建矩形类相关推荐

  1. python求数组平均值_用python求一个数组的和与平均值的实现方法

    用python求一个数组的和与平均值的实现方法 如下所示: # coding = GBK a =[1,2,3,4,5] sum=0 b = len(a) print("这个数组的长度为:&q ...

  2. python求素数平均值_用python怎么求素数

    如何用python求100以内的素数? 质数(primenumber)又称素数,有无限个.质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数,如:2.3.5.7.11.13.1 ...

  3. python求素数积_用Python求素数的快速算法源码示例

    本篇文章为Python算法相关,用Python求素数的快速算法源码示例.算法在Python的学习中算是一个要点,能研究明白算法的同学都可以算的上是Python的大牛了. 首先简单的来说下什么是素数:质 ...

  4. 用python求正方形周长_用于正方形、矩形和ci的周长和面积的单独函数

    嘿,伙计们,我对Python和一般的编码还很陌生,我想知道为什么我的代码不能工作.我一直有两个错误.我很沮丧,我已经在这干了几个小时了.谢谢 这些是我一直收到的错误. Typeerror:**或pow ...

  5. python求定积分程序_在python中用sympy求定积分失败

    用python sympy 求定积分,代码如下: E=210000 from sympy import * x=symbols('x') T_2=(125-x)/50*(21-18)+18 Radiu ...

  6. python求最值_用Python实现最速下降法求极值的方法

    对于一个多元函数 ,用最速下降法(又称梯度下降法)求其极小值的迭代格式为 其中 为负梯度方向,即最速下降方向,αkαk为搜索步长. 一般情况下,最优步长αkαk的确定要用到线性搜索技术,比如精确线性搜 ...

  7. python求抛物线函数_在python中利用最小二乘拟合二次抛物线函数的方法

    1.最小二乘也可以拟合二次函数 我们都知道用最小二乘拟合线性函数没有问题,那么能不能拟合二次函数甚至更高次的函数呢?答案当然是可以的.下面我们就来试试用最小二乘来拟合抛物线形状的的图像. 对于二次函数 ...

  8. python求方程组近似解_使用python的sympy解符号方程组后,如何将结果带入之后的符号表达式...

    满意答案 ur51yykufe 2017.11.22 采纳率:52%    等级:12 已帮助:12434人 Sympy是python中非常强大的符号运算库,可以以书写习惯表示数学表达式.下面介绍用S ...

  9. python求非线性优化问题_用python优化非线性函数

    我在python中有一个函数,如下所示:import numpy as np def fun(Gp,Ra,Mr,Pot,Sp,Mc,Keep): if(Keep==True): return(Pot* ...

最新文章

  1. Flask一:安装初始,return方式,Request,Jinja2,session
  2. Node.js—简介
  3. SharePoint 2013 List 备份使用
  4. java策略_java策略模式
  5. 对C#中的Close()和Dispose()的浅析
  6. aspx 判断字符串是否为decimal_C++编程技巧: 如何判断输入是否为整型
  7. Android怎样实现毛玻璃效果之Android高级模糊技术
  8. JS对象 颠倒数组元素顺序reverse() reverse() 方法用于颠倒数组中元素的顺序。
  9. BZOJ 1565: [NOI2009]植物大战僵尸
  10. WebRTC sdp详解
  11. 使用wireshark抓包分析实战
  12. 机器学习(Machine Learning)深度学习(Deep Learning)资料
  13. 百度收录批量查询_如何查看网站是否被收录?
  14. Lumen (Laravel子框架) 简介及分析
  15. iOS获取设备IP地址
  16. openwrt重启后,修复dns
  17. c语言 json 请求_JSON的简单介绍以及C语言的JSON库使用
  18. css inherit
  19. java面试一些问题汇总
  20. Apple developer新的的注册方式

热门文章

  1. Logtail从入门到精通(三):机器分组配置
  2. 分布式系统与消息投递
  3. 【BAT面试现场】如何判断一个数是否在40亿个整数中?
  4. 自动生成考勤表_可自动变色的考勤表,逢周末自动更新,你会制作吗?
  5. idea 开启Run DashBoard
  6. Visual Studio Code
  7. flowable6.4.2流程审批后涉及到的表
  8. 前端常用 JavaScript 方法封装
  9. ElementUI的el-table隐藏id列
  10. linux内核重要结构体,Linux中list_head结构体相关 | 技术部落