gpt4 book ai didi

java - python中java的 'constructor-overload'相当于什么?

转载 作者:行者123 更新时间:2023-11-30 10:06:14 25 4
gpt4 key购买 nike

我目前正在学习 Python。我正在尝试编写一个练习代码,使“Line”类具有不同的可能输入参数,因此具有不同的构造函数,就像在 Java 中可以做的那样。即一个带有 (point,point) 对象的构造函数和一个带有 (point,slope) 对象的构造函数 它分别与两种 __init__ 方法一起工作,但不像在 python 中那样与这两种方法一起工作。谁能帮我解决这个问题。

class Point:
def __init__(self,x,y):
self.x=x
self.y=y
def distance_to(self,p):
return((p1.x-p.x)**2+(p1.y-p.y)**2)**(1/2)

class Line:
def __init__(self, p1,p2):
self.p1=p1
self.p2=p2
def __init__(self,p1,a):
self.p1=p1
self.a=a
b=self.p1.y-a*p1.x
p2=Point(0,b)
self.p2=p2
def slope(self):
return (p2.y-p1.y)/(p2.x-p1.x)
def b_intersect(self):
b_intersect=self.p1.y-self.slope()*p1.x
def __str__(self):
b_intersect=self.p1.y-self.slope()*p1.x
if b_intersect>0:
return 'y={}x+{}'.format(self.slope(),b_intersect)
elif b_intersect<0:
return 'y={}x{}'.format(self.slope(),b_intersect)
elif b_intersect==0:
return 'y={}x'.format(self.slope())

最佳答案

您可以在 __init__ 方法中使用 *kwargs 来检查您收到的参数并采取相应的行动。您修改后的代码应如下所示。

class Point:
def __init__(self,x,y):
self.x=x
self.y=y
def distance_to(self,p):
return((p1.x-p.x)**2+(p1.y-p.y)**2)**(1/2)

class Line:
def __init__(self, p1,**kwargs):
self.p1=p1
if kwargs.get("p2") is not None:
self.p2=p2
elif kwargs.get("a")is not None:
self.a=a
b=self.p1.y-a*p1.x
p2=Point(0,b)
self.p2=p2
else:
raise Exception("Did not give enough parameters")
def slope(self):
return (p2.y-p1.y)/(p2.x-p1.x)
def b_intersect(self):
b_intersect=self.p1.y-self.slope()*p1.x
def __str__(self):
b_intersect=self.p1.y-self.slope()*p1.x
if b_intersect>0:
return 'y={}x+{}'.format(self.slope(),b_intersect)
elif b_intersect<0:
return 'y={}x{}'.format(self.slope(),b_intersect)
elif b_intersect==0:
return 'y={}x'.format(self.slope())

关于java - python中java的 'constructor-overload'相当于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54747985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com