我似乎无法从父 'Circle' 类中获取半径 'r' 变量并在子 'Cylinder' 类中使用它。尝试了多种不同的方法,似乎找不到我的错误!
class Circle(Point):
def __init__(self, r):
self.r = r
class Cylinder(Circle):
def __init__(self,h):
Circle.__init__(self,r)
self.h = h
此代码导致以下错误
>>> circle = Circle(5)
>>> cylinder = Cylinder(3)
Traceback (most recent call last):
File "<pyshell#123>", line 1, in <module>
cylinder = Cylinder(3)
File "C:/Users/theco/Desktop/OOP Shape.py", line 49, in __init__
Circle.__init__(self, r)
NameError: name 'r' is not defined
任何帮助,将不胜感激!谢谢!
您的代码有一些问题。
你不是Circle
通过do 来调用超类的构造函数Circle.__init__(self,r)
,而是通过do super().__init__(r)
,这意味着我想调用super
orParent
类的构造函数
你是不是通过r
在构造函数中Cylinder
,(你只是做__init__(self,h):
,但你想用它传递给构造函数Circle
这是不可能的,你需要通过双方r
并h
给构造的Cylinder
类似__init__(self, r, h):
所以你的固定代码看起来像
class Circle(Point):
def __init__(self, r):
self.r = r
class Cylinder(Circle):
#Passing both r and h to Cylinder constructor
def __init__(self,r, h):
#Passing r to Circle Constructor
super().__init__(r)
self.h = h
然后当你相应地调用它时,你会看到它现在起作用了
circle = Circle(5)
print(circle.r)
#5
cylinder = Cylinder(5, 3)
print(cylinder.r)
#5
print(cylinder.h)
#3
也只是为了幽默自己,尝试定义area
和volume
功能Circle
,并Cylinder
分别,你会看到传承的力量
import math
class Circle(Point):
def __init__(self, r):
self.r = r
#Area of circle is pi*r*r
def area(self):
return math.pi * self.r * self.r
class Cylinder(Circle):
#Passing both r and h to Cylinder constructor
def __init__(self,r, h):
#Passing r to Circle Constructor
super().__init__(r)
self.h = h
#Volume of cylinder is pi*r*r*h
def volume(self):
return self.area()*self.h
然后您可以按如下方式调用它们:
circle = Circle(5)
print(circle.area())
#78.53981633974483
cylinder = Cylinder(5, 3)
print(cylinder.volume())
#235.61944901923448
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句