鱼C论坛

 找回密码
 立即注册
查看: 19155|回复: 12

TypeError: __init__() missing 2 required positional arguments: 'x1' and 'y1'

[复制链接]
发表于 2018-5-28 07:16:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import math

class Point1:
    def __init__(self, x1, y1):
        self.x1 = x1
        self.y1 = y1
        
p = Point1(2, 2)

class Point2:
    def __init__(self, x2, y2):
        self.x2 = x2
        self.y2 = y2

p = Point2(4, 4)



class Line(Point1, Point2):

    def __init__(self):
        super().__init__()
        
    def get_len(self):
        square = (self.x2 - self.x1)*(self.x2 - self.x1) + (self.y2 - self.y1)*(self.y2 - self.y1)
        line = math.sqrt(square)
        print(self.line)

l = Line()
l.get_len()


#报错内容
Traceback (most recent call last):
  File "E:\my option\python\038题目.py", line 192, in <module>
    l = Line()
  File "E:\my option\python\038题目.py", line 185, in __init__
    super().__init__()
TypeError: __init__() missing 2 required positional arguments: 'x1' and 'y1'

#我已经用super()函数加载了Point1,Point2的属性,怎么出现了类型错误啊?传入的y1和x1都是int类型呀,怎么是TypeError了呀?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-5-28 08:45:30 | 显示全部楼层
hi 原因如下
import math

class Point1:
    def __init__(self, x1, y1):
        self.x1 = x1
        self.y1 = y1
        
p1 = Point1(2, 2) #和下面重名了

class Point2:
    def __init__(self, x2, y2):
        self.x2 = x2
        self.y2 = y2

p2 = Point2(4, 4)#重名了,需要修改



class Line():

    #def __init__(self): #这个__init__没有什么实际作用,建议删除
        #super().__init__()
        
    def get_len(self,p1,p2): #get_len存在代码逻辑错误,已修改
        square = (p2.x2 - p1.x1)*(p2.x2 - p1.x1) + (p2.y2 - p1.y1)*(p2.y2 - p1.y1)
        self.line = math.sqrt(square)
        print(self.line)

l = Line()  
l.get_len(p1,p2) #需要加入参数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-28 09:13:06 | 显示全部楼层
1 第8行和第15行定义的p变量冲突,15行的覆盖的第8行的,改为p1,p2

2 逻辑冗余,直接定义一个point类即可

3 对Line进行init的时候传入point对象才比较合理

修改代码如下,供lz参考:
import math

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y    


class Line():
    def __init__(self,p1,p2):
        self.p1 = p1
        self.p2 = p2
        
    def get_len(self):
        square = (self.p2.x - self.p1.x)*(self.p2.x - self.p1.x) + \
                 (self.p2.y - self.p1.y)*(self.p2.y - self.p1.y)
        self.line = math.sqrt(square)
        print(self.line)


p1 = Point(2, 2)
p2 = Point(4, 4)
l = Line(p1,p2)  
l.get_len() 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2018-5-28 11:32:59 | 显示全部楼层
init方法在子类中没有传递足够数量的参数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-28 12:20:26 | 显示全部楼层
ABC23 发表于 2018-5-28 11:32
init方法在子类中没有传递足够数量的参数

平方根的算法都忘了,初中学的年份久了,都需要温习啊,上面总结的挺好的,慢慢看了。

你说的是如果init方法在子类中传递足够数量的参数就代码就没问是吗?还是init方法中的super函数根本就不能用,我还是慢慢看吧,仔细思考一下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-28 15:28:30 | 显示全部楼层
BngThea 发表于 2018-5-28 09:13
1 第8行和第15行定义的p变量冲突,15行的覆盖的第8行的,改为p1,p2

2 逻辑冗余,直接定义一个point类即 ...

Point类里面的x,y是怎么和Line类里面的p1,p2联系到一起的呀?我找了一下没有他们之间的关系啊,运行的话能能运行,但是理解不了啊。怎么联系的跟我说一下呗,不太懂啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-28 15:42:38 | 显示全部楼层
BngThea 发表于 2018-5-28 09:13
1 第8行和第15行定义的p变量冲突,15行的覆盖的第8行的,改为p1,p2

2 逻辑冗余,直接定义一个point类即 ...

啊,看到了,是实例化的时候有联系啊,刚才看糊涂了,自己再看看,分析一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-28 16:31:59 | 显示全部楼层
本帖最后由 大地0725 于 2018-5-28 16:38 编辑


import math

class Point1:
    def __init__(self, x1, y1):
        self.x1 = x1
        self.y1=y1
        
p1=Point1(2,2)     

class Point2:
    def __init__(self, x2, y2):
        self.x2 = x2
        self.y2 = y2

p2=Point2(4,4)

class Line():

    def __init__(self,p1,p2):
         super().__init__()
        
    def get_len(self):
        square = (p2.x2 - p1.x1)*(p2.x2 - p1.x1) + (p2.y2 - p1.y1)*(p2.y2 - p1.y1)
        print(p1.x1,p1.y1,p2.x2,p2.y2)
        self.line = math.sqrt(square)
        print(self.line)


l =Line(p1,p2)
l.get_len()

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-28 16:40:54 | 显示全部楼层
请问发python代码,怎么设置格式?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-28 17:25:50 | 显示全部楼层
大地0725 发表于 2018-5-28 16:40
请问发python代码,怎么设置格式?

https://jingyan.baidu.com/article/bad08e1ec2e4c709c9512161.html


这个网站可以设置字体格式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-28 17:30:24 | 显示全部楼层
大地0725 发表于 2018-5-28 16:40
请问发python代码,怎么设置格式?

代码格式设置.png


提问问题界面的输入框上面有<>这样的符号,点击这个,然后弹出输入框,里面黏贴代码就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-28 18:50:37 | 显示全部楼层
import math

class Point1:
    def __init__(self, x1, y1):
        self.x1 = x1
        self.y1=y1
        
p1=Point1(2,2)     

class Point2:
    def __init__(self, x2, y2):
        self.x2 = x2
        self.y2 = y2

p2=Point2(4,4)

class Line():

    def __init__(self,p1,p2):
         super().__init__()
        
    def get_len(self): 
        square = (p2.x2 - p1.x1)*(p2.x2 - p1.x1) + (p2.y2 - p1.y1)*(p2.y2 - p1.y1)
        print(p1.x1,p1.y1,p2.x2,p2.y2)
        self.line = math.sqrt(square)
        print(self.line)


l =Line(p1,p2)
l.get_len()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-28 18:51:11 | 显示全部楼层
金刚 发表于 2018-5-28 17:30
提问问题界面的输入框上面有这样的符号,点击这个,然后弹出输入框,里面黏贴代码就行了

谢谢,成功了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-29 11:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表