鱼C论坛

 找回密码
 立即注册
查看: 2088|回复: 10

[已解决]面对对象编程,不用__init_()方法会出错。。。

[复制链接]
匿名鱼油
匿名鱼油  发表于 2021-7-16 17:14:29 |阅读模式

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

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

x
要调用对象里的方法,为什么不能赋值给一个变量呢?零基础入门学python038里的例子如下,Point class如果不用init,应该怎么写呢?如果改成def dian()实例化point= Point(), 然后就不能把point.dian(1,1) 和point.dian(4,5)赋值给p1,p2来计算接下来的线段。如果赋值,p1,p2显示为None。那本题如果不用init应该怎样写呢?谢谢

import math

class Point():
    def __init__(self, x=0, y=0):                                       def dian(self, x =0, y =0):
        self.x = x                                   如果改为                    self.x = x
        self.y = y                           ----------------------->            self.y = y      

    def getX(self):
        return self.x

    def getY(self):
        return self.y

class Line():
    def __init__(self, p1, p2):
        self.x = p1.getX() - p2.getX()
        self.y = p1.getY() - p2.getY()
        self.len = math.sqrt(self.x*self.x + self.y*self.y)

    def getLen(self):
        return self.len

>>> p1 = Point(1, 1)
>>> p2 = Point(4, 5)
>>> line = Line(p1, p2)
>>> line.getLen()
5.0
最佳答案
2021-7-16 17:36:29
  1. import math

  2. class Point():
  3.     def dian(self, x =0, y =0):
  4.         self.x = x
  5.         self.y = y      

  6.     def getX(self):
  7.         return self.x

  8.     def getY(self):
  9.         return self.y

  10. class Line():
  11.     def __init__(self, p1, p2):
  12.         self.x = p1.getX() - p2.getX()
  13.         self.y = p1.getY() - p2.getY()
  14.         self.len = math.sqrt(self.x*self.x + self.y*self.y)

  15.     def getLen(self):
  16.         return self.len
复制代码

  1. >>> p1 = Point()
  2. >>> p1.dian(1, 1)
  3. >>> p2 = Point()
  4. >>> p2.dian(4,5)
  5. >>> line = Line(p1,p2)
  6. >>> line.getLen()
  7. 5.0
复制代码


__init__()是初始化方法
不写也行
就是多一步赋值调用的操作
写了的话在实例化对象生成时自己就调用了
回复

使用道具 举报

发表于 2021-7-16 17:21:53 | 显示全部楼层

回帖奖励 +50 鱼币

学习学习
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-16 17:21:53 | 显示全部楼层

回帖奖励 +50 鱼币

本帖最后由 青出于蓝 于 2021-7-16 17:26 编辑

改完后再调用就会报错了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-16 17:25:24 | 显示全部楼层
https://blog.csdn.net/qq_30597401/article/details/108409239
楼主可以参考
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-16 17:36:29 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +50 鱼币

  1. import math

  2. class Point():
  3.     def dian(self, x =0, y =0):
  4.         self.x = x
  5.         self.y = y      

  6.     def getX(self):
  7.         return self.x

  8.     def getY(self):
  9.         return self.y

  10. class Line():
  11.     def __init__(self, p1, p2):
  12.         self.x = p1.getX() - p2.getX()
  13.         self.y = p1.getY() - p2.getY()
  14.         self.len = math.sqrt(self.x*self.x + self.y*self.y)

  15.     def getLen(self):
  16.         return self.len
复制代码

  1. >>> p1 = Point()
  2. >>> p1.dian(1, 1)
  3. >>> p2 = Point()
  4. >>> p2.dian(4,5)
  5. >>> line = Line(p1,p2)
  6. >>> line.getLen()
  7. 5.0
复制代码


__init__()是初始化方法
不写也行
就是多一步赋值调用的操作
写了的话在实例化对象生成时自己就调用了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-16 17:39:22 | 显示全部楼层

回帖奖励 +50 鱼币

回帖就有奖励,我不信
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-16 18:04:11 | 显示全部楼层
__init__ 是默认的,你可以理解为规定,他就是要这么写,你若是要打破规则,那可能会出错,也可能不会出错,但是,很多人都是默认用__init__初始化的,你要跟别人不一样的话,到时候难沟通
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-16 18:05:18 | 显示全部楼层
__init__是内置函数,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-17 06:59:42 | 显示全部楼层
有奖励吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-17 10:15:17 | 显示全部楼层
你定义个叫 dian函数来完成 x, y 的赋值,肯定是可以的。只要你相应调用它就行了。
而用 __init__ 的好处是:
一、比较符合"见名知意",即 完成一些"初始化"的工作,
二、它在你使用Point(0,0)时(即构造对象时),就会自动执行的"特殊方法",
       而你用自定义的一般函数dian,那就必须自己手动调用才能完成x,y的赋值。

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-30 16:47:46 | 显示全部楼层
学习学习!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-7 11:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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