_init__() 采用 1 个位置参数,但给出了 2 个
_init__() takes 1 positional argument but 2 were given
我正在测试 OOP 课程的一些代码,但我 运行 遇到了问题。我正在编写一个圆和一个圆柱,圆 class 也在圆柱的初始值中。我有 2 个圆柱体参数,但是当我给出 2 个参数时,据说我只需要 1 个,如果我给出一个参数而不是它给出的输出,则缺少一个。
用变量a它可以工作,但错误在变量b中。我错了什么
import math
class CCircle:
def __init__(self):
self._radius = 0
@property
def area(self):
return self._radius**2 * math.pi
@area.setter
def area(self, value):
self._radius = math.sqrt(value / math.pi)
@property
def circumference(self):
return self._radius * 2 * math.pi
@circumference.setter
def circumference(self, value):
self._radius = value / (2 * math.pi)
class CCylinder:
def __init__(self, radius, height):
self._circle = CCircle(radius)
self._height = height
@property
def circumference(self):
return self._circle.circumference
@property
def ground_area(self):
return self._circle.area
@property
def total_area(self):
return self._circle.area + self._height * self._circle.circumference
@property
def volume(self):
return self._circle.area * self._height
a = CCircle()
b = CCylinder(1,4)
init() takes 1 positional argument but 2 were given
这一行有问题:
self._circle = CCircle(radius)
但是 CCircle
class 的 __init__
不接受任何参数(self
除外),所以这是导致错误的原因。
你应该让你的 CCircle class 像这样开始
class CCircle:
def __init__(self, radius=0):
self._radius = radius
这样您就可以获得您似乎想要的默认半径 0,但也可以像您在 CCylinder class.[=11 的初始化代码中那样使用半径值对其进行初始化=]
你可能在 .py 文件所在的地方有一个包文件夹,删除它应该可以解决你的问题
我正在测试 OOP 课程的一些代码,但我 运行 遇到了问题。我正在编写一个圆和一个圆柱,圆 class 也在圆柱的初始值中。我有 2 个圆柱体参数,但是当我给出 2 个参数时,据说我只需要 1 个,如果我给出一个参数而不是它给出的输出,则缺少一个。
用变量a它可以工作,但错误在变量b中。我错了什么
import math
class CCircle:
def __init__(self):
self._radius = 0
@property
def area(self):
return self._radius**2 * math.pi
@area.setter
def area(self, value):
self._radius = math.sqrt(value / math.pi)
@property
def circumference(self):
return self._radius * 2 * math.pi
@circumference.setter
def circumference(self, value):
self._radius = value / (2 * math.pi)
class CCylinder:
def __init__(self, radius, height):
self._circle = CCircle(radius)
self._height = height
@property
def circumference(self):
return self._circle.circumference
@property
def ground_area(self):
return self._circle.area
@property
def total_area(self):
return self._circle.area + self._height * self._circle.circumference
@property
def volume(self):
return self._circle.area * self._height
a = CCircle()
b = CCylinder(1,4)
init() takes 1 positional argument but 2 were given
这一行有问题:
self._circle = CCircle(radius)
但是 CCircle
class 的 __init__
不接受任何参数(self
除外),所以这是导致错误的原因。
你应该让你的 CCircle class 像这样开始
class CCircle:
def __init__(self, radius=0):
self._radius = radius
这样您就可以获得您似乎想要的默认半径 0,但也可以像您在 CCylinder class.[=11 的初始化代码中那样使用半径值对其进行初始化=]
你可能在 .py 文件所在的地方有一个包文件夹,删除它应该可以解决你的问题