|
4鱼币
本帖最后由 xue11 于 2018-5-21 23:11 编辑
整体对init方法很不懂,对self.name = name很迷茫
问题1: 这个init构造方法到底有什么用途啊,小甲鱼老师说“重写init方法,可以定义对象的初始化操作"是什么意思,这个构造方法构造了什么?”重写init方法“是什么意思,难道不写上类代码中上也会调用吗?
例如:Class Bird():
def __init__(self):
self.name='小鸟'
这个例子算重写了init方法,这可以理解为重写吗?要是没有写init这个方法,这个Bird()类会调用init吗,感觉不会,
问题2:init方法传入参数是怎么情况,根据小甲鱼老师的写的代码,传入的参数就是变量(属性)啊,例如图片的代码(见图片),是否可以理解为init方法就是重写”属性“的?
例2:class Ball:
def __init__(self , name):
self.name = name
def kick(self):
print('我叫%s,该死的,谁踢我,.....' % self.name)
问题3:这里没有明白为什么写成‘self.name = name’ ,为什么要这么写?
例3:class Ball:
def __init__(seif ,name):
pass
def kick(self):
print('我叫%S,该死的,谁踢我,.....' % self.name)
问题4:如改成例3这样为什么会报错?
>>> b = Ball('小甲鱼')
>>> b.kick()
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
b.kick()
File "C:\Users\songyuxue\Desktop\新建文本文档 (2).py", line 5, in kick
print('我叫%S,该死的,谁踢我,.....' % self.name)
AttributeError: 'Ball' object has no attribute 'name'
问题1: 这个init构造方法到底有什么用途啊,小甲鱼老师说“重写init方法,可以定义对象的初始化操作"是什么意思,这个构造方法构造了什么?”重写init方法“是什么意思,难道不写上类代码中上也会调用吗?
即使在类Bird中不写 __init__() 方法,它也会被调用。所有类继承自object,object含有各种魔法方法。
老师说的 '重写init方法,可以定义对象的初始化操作' , 目前可以简单理解为:实例化对象 初始化时,自动生成其属性。比如:bird = Bird(), 实例化对象bird生成时,自带属性name 且 其值为 '小鸟'。如果你不写__init__() 、方法中也不定义需要的属性, 实例化对象bird生成时,没有自己定义的属性。
问题2:init方法传入参数是怎么情况,根据小甲鱼老师的写的代码,传入的参数就是变量(属性)啊,例如图片的代码(见图片),是否可以理解为init方法就是重写”属性“的?
比如: ball = Ball('football') ,这样就是 生成实例化对象ball时,传入参数 'football',用以给实例化对象ball的属性name赋值(使name='football')。通过__init__方法,可以给定义的实例化属性赋值
例2:class Ball:
def __init__(self , name):
self.name = name
def kick(self):
print('我叫%s,该死的,谁踢我,.....' % self.name)
问题3:这里没有明白为什么写成‘self.name = name’ ,为什么要这么写?
你的属性名是 self.name , 参数名为 name , 将传入的参数值 赋值给属性:self.name = name
例3:class Ball:
def __init__(seif ,name):
pass
def kick(self):
print('我叫%S,该死的,谁踢我,.....' % self.name)
问题4:如改成例3这样为什么会报错?
因为,在__init__()中定义了两个参数:self,name, 实例化对象时 b = Ball('小甲鱼') :b就是参数self、name是'小甲鱼' ,但是没有写self.name属性、 self.name就不会被赋值,因此报错:'Ball' object has no attribute 'name' 对象没有name属性
|
最佳答案
查看完整内容
问题1: 这个init构造方法到底有什么用途啊,小甲鱼老师说“重写init方法,可以定义对象的初始化操作"是什么意思,这个构造方法构造了什么?”重写init方法“是什么意思,难道不写上类代码中上也会调用吗?
即使在类Bird中不写 __init__() 方法,它也会被调用。所有类继承自object,object含有各种魔法方法。
老师说的 '重写init方法,可以定义对象的初始化操作' , 目前可以简单理解为:实例化对象 初始化时,自动生成其属性。 ...
|