【发布时间】:2017-02-16 18:23:48
【问题描述】:
跟进我发布的代码 sn-p 审核问题:https://codereview.stackexchange.com/questions/143576/oop-designing-class-inheritances
这是家庭作业,所以我不是要求为我做,而是为我澄清,以便我理解。
以下是作业中关于我必须编写的程序的内容:
必填: 编写一个 OO Python 程序,展示您的子类如何从超类继承您可以拥有一个类(首选但不是必须)或两个或多个超类。
我要做的是编写一个 oo python 程序,显示由一个类或两个或多个超类继承的子类。该程序必须与形状有关。作为一个例子,我的意思是:
形状:方形
属性:
- 长度
- 宽度
方法:
- 地区
- 周长
我当然有更多的形状,但我从中找到了所有形状的共同属性和方法,并创建了超类和子类。
我的超类是:2dShapes、circles 和 3dShapes。我的子类就像长度和宽度。我的方法是面积和周长。注意我在这一点上漫无目的。下面的代码 sn-p 没有显示这一点,而是我正在考虑为属性和方法创建一个超类,而不是为形状创建子类?也许吧?
问题:这是一个好的类结构吗?有没有更好的方法来组织这里的类?这是我正在考虑如何执行此操作的示例。
class Shapes(attributes):
def __init__(self):
attributes.__init__(self)
# not sure how to go on to make the attributes like height and length, radius ect. Maybe like this???
def height(self):
raise NotImplementedError # again this program is not supose to actually do anything. The program is just for us to understand inheritance with classes and super classes.
class 2dShapes(Shapes):
class Square(self):
def height(self):
# ???
所以在这一点上,我很困惑从哪里开始。另外我对python很陌生,所以对我温柔一点:p
【问题讨论】:
-
这是一个继承自另一个类的类。你对什么感到困惑?
-
对家庭作业保持开放和建设性的态度很好:) 但是您可能必须使您的问题更加本地化。你有一个具体的问题吗?另外:您是在说“我的子类就像长度和宽度”,但这没有多大意义,而且这不是您的 sn-p 所表示的。另外:您真的想将这些类嵌套在底部块中吗?最后,你知道如果你这样写
attributes本身应该是一个类吗? -
@AndrasDeak 谢谢。我的具体问题是如何在不重复的情况下为属性和方法进行良好的类设计。
-
请澄清问题。
-
我相信标准的方法是拥有一个 2d 和 3d 形状的类(如果你愿意,可以称之为超类)。这些可以细分为圆形、矩形(在 2d 的情况下)和球体、八面体(在 3d 的情况下)。所有这些类都有方法,有些是共同的,有些不是。这应该确定这些方法的定义位置。
标签: python python-3.x oop inheritance