面对对象编程,不用__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:26 编辑
改完后再调用就会报错了 https://blog.csdn.net/qq_30597401/article/details/108409239
楼主可以参考 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__()是初始化方法
不写也行
就是多一步赋值调用的操作
写了的话在实例化对象生成时自己就调用了 回帖就有奖励,我不信 __init__ 是默认的,你可以理解为规定,他就是要这么写,你若是要打破规则,那可能会出错,也可能不会出错,但是,很多人都是默认用__init__初始化的,你要跟别人不一样的话,到时候难沟通 __init__是内置函数, 有奖励吗{:10_266:} 你定义个叫 dian函数来完成 x, y 的赋值,肯定是可以的。只要你相应调用它就行了。
而用 __init__ 的好处是:
一、比较符合"见名知意",即 完成一些"初始化"的工作,
二、它在你使用Point(0,0)时(即构造对象时),就会自动执行的"特殊方法",
而你用自定义的一般函数dian,那就必须自己手动调用才能完成x,y的赋值。
学习学习!!
页:
[1]