请帮我修改这个圆圈,(1)设置默认实例。
圆类使用Point对象作为中心。使用center和radius关键字,以center为第一个参数。使用 repr 和 str 。将点对象和半径值指定给圆时, the output should look like this for assigned values
没有输入的圆的默认值为:以a的默认实例为中心 点对象,半径为1。
This is how the output should look like for default values
This is what I am getting for defaults
如果我要更改以下内容
def __repr__(self):
return "Circle(center=Point({0}, {1}), radius {2})"
.format(self.center[0],self.center[1],self.radius)
到此:
import math
class Point:
def __init__(self,x=0,y=0):
self.x = x
self.y = y
def __iter__(self):
yield self.x
yield self.y
def __add__(self,other):
return Point(self.x+other.x,self.y+other.y)
def __mul__(self,n):
return Point(self.x*n,self.y*n)
def __rmul__(self,n):
return Point(n*self.x,n*self.y)
@classmethod
def from_tuple (cls, self=(0,0)):
return cls(*self)
def loc_from_tuple(self,t=(0,0)):
self.x=t[0]
self.y=t[1]
def __str__(self):
return "Point at ({0}, {1})".format(self.x,self.y)
def __repr__(self):
return"Point(x={0}, y={1})".format(self.x,self.y)
@property
def magnitude(self):
return math.sqrt(self.x**2+self.y**2)
def distance (self, other):
return math.sqrt((self.x-other.x)**2+(self.y-other.y)**2)
def shift(p1, p2):
mx = p1.x+p2.x
my = p1.y+p2.y
return Point(mx,my)
class Circle(Point):
def __init__(self, center=(0,0), radius=1):
Point.__init__(self,center)
self.center=center
self.radius=radius
def __str__(self):
return "Circle with center at ({0}, {1}) and radius {2}"
.format(self.center.x, self.center.y, self.radius)
def __repr__(self):
return "Circle(center=Point({0}, {1}), radius={2})"
.format(self.center.x,self.center.y,self.radius)
def __add__(self,other):
return Circle(
Point(self.center.x+other.center.x,
self.center.y+other.center.y),
self.radius+other.radius)
@classmethod
def from_tuple(cls, center,radius):
return cls(center, radius)
@property
def radius(self):
return self._radius
@radius.setter
def radius(self, radius):
if radius<0:
raise ValueError('The radius cannot be negative')
self._radius=radius
@property
def diameter(self):
return self._radius*2
@diameter.setter
def diameter(self, diameter):
if diameter<0:
raise ValueError('The radius cannot be negative')
self._radius = diameter/2
@property
def area(self):
return math.pi*self.radius**2
这将产生错误,因为指定中心点(2,3)的点对象不支持索引。
{{1}}
答案 0 :(得分:0)
Center是一个元组,因此它没有属性x
。在这里你定义中心:
class Circle(Point):
def __init__(self, center=(0,0), radius=1):
Point.__init__(self,center)
self.center=center
在这里你打电话给center.x
def __repr__(self):
return "Circle(center=Point({0}, {1}), radius={2})"
.format(self.center.x,self.center.y,self.radius)
快速解决方法是将__repr__
更改为:
def __repr__(self):
return "Circle(center=Point({0}, {1}), radius={2})"
.format(self.center[0],self.center[1],self.radius)
这样你就可以为元组编制索引。另一种方法是将中心设为像center = {'x':0, 'y'0}
这样的字典。然后__repr__
将按原样运行,但您必须完成其余程序以确保一致性。
答案 1 :(得分:0)
错误消息告诉您需要知道的一切: AttributeError:&#39;元组&#39;对象没有属性&#39; x&#39;
违规行是这一行:
return "Circle(center=Point({0}, {1}), radius={2})"
.format(self.center.x,self.center.y,self.radius)
对象center
是一个元组,意味着它的变量是使用索引而不是属性名来访问的。请尝试改为:
return "Circle(center=Point({0}, {1}), radius={2})"
.format(self.center[0],self.center[1],self.radius)
更好的方法是实际使用Circle
中的Point
继承并直接访问x
和y
- 没有理由保留center
作为实例变量,如果你已经拥有了所有你需要的东西:
return "Circle(center=Point({0}, {1}), radius={2})"
.format(self.x,self.y,self.radius)