Anonymous 发表于 2021-7-16 17:14:29

面对对象编程,不用__init_()方法会出错。。。

要调用对象里的方法,为什么不能赋值给一个变量呢?零基础入门学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:21:53

学习学习

青出于蓝 发表于 2021-7-16 17:21:53

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

改完后再调用就会报错了

青出于蓝 发表于 2021-7-16 17:25:24

https://blog.csdn.net/qq_30597401/article/details/108409239
楼主可以参考

逃兵 发表于 2021-7-16 17:36:29

import math

class Point():
    def dian(self, x =0, y =0):
      self.x = x
      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()
>>> p1.dian(1, 1)
>>> p2 = Point()
>>> p2.dian(4,5)
>>> line = Line(p1,p2)
>>> line.getLen()
5.0

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

xqq1984 发表于 2021-7-16 17:39:22

回帖就有奖励,我不信

深谙流年 发表于 2021-7-16 18:04:11

__init__ 是默认的,你可以理解为规定,他就是要这么写,你若是要打破规则,那可能会出错,也可能不会出错,但是,很多人都是默认用__init__初始化的,你要跟别人不一样的话,到时候难沟通

深谙流年 发表于 2021-7-16 18:05:18

__init__是内置函数,

Kayko 发表于 2021-7-17 06:59:42

有奖励吗{:10_266:}

阿奇_o 发表于 2021-7-17 10:15:17

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

犬来猫荒 发表于 2021-7-30 16:47:46

学习学习!!
页: [1]
查看完整版本: 面对对象编程,不用__init_()方法会出错。。。