马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 heidern0612 于 2018-12-17 10:21 编辑
写心得的过程都是自我思考的过程,借鉴了很多论坛大神和前辈的经验,难免有疏漏和错误,恳请指出,不胜感激。
不知不觉学到第38讲,心里惴惴不安,总感觉好像什么都没学到,又好像学到点什么,试着去回忆的时候,却发现一脑袋空白。
好像达到了“无招胜有招”的境界。
老师的例题这一节还算比较简单(我真的不愿意面对数学,为啥老师出的都是个数学题啊,最后一题那个公式是个啥谁能告诉我),
如果有同学不明白的,欢迎跟帖跟我一起讨论。
借老师的038讲,厚着脸皮强行装逼一波,想谈一谈类中的__init__到底是个啥。
说init之前先说说类和实例都是什么吧。
1、类和实例
老师课堂讲的蛮好,类其实就好比一张建筑图纸,你可以按照图纸造出房子,但是你不能说图纸就是房子。
如果说这个例子比较抽象,那就在实例化点。
比如你叫John Ramble,我在跟人介绍的时候,我会说:“这是我的朋友,John”,甚至我会跟朋友大吹特吹你是越战英雄。
但我肯定不能跟人介绍说:“这是我的朋友,他是个人类。”,那就不是介绍朋友,那是要打架了。
以上例子中,图纸和人都是比较抽象的东西,这个东西看不见摸不着,但是可以代表一大类的东西。
而房子和你都是比较实例化的东西,这东西看得见摸的着,一个只能代表一个个体,比如你的名字和别人的名字、你的指纹和别人的指纹。
图纸可以指代很多房子,每个房子虽然一样,但是住的人不一样。
人类可以代表很多人,但每个人却只有唯一的一个名字。
有同学说,人有重名的啊……卧槽,再见拜拜来不及分手祝你幸福。
2、举个栗子说明,先传入一个最终的init例子。
A、调用__init__:
class Person():
def __init__(self,name,age):
self.Xname = name
self.Xage = age
print(f"你的名字是:{self.Xname},你的年龄是{self.Xage}")
male = Person("John","28")
首先我创建了一个人的类,在人的类里面我定义了一些人的属性,名字和年纪。
我初始化了下函数,方便后面的直接调用,然后我print了调用函数的例子。
这里面,self代表的是实例的本身,也就是说,实例的本身就是个参数,代表self。
Xname用于区别name(一般的时候我们都这么写:self.name =name)。
这里Xname代表的是实例的名字,而name代表的是类中形参的名字。(Xname代表实际的名字,而name只是代表一个抽象的名字),Xage同理。
图纸有了(class类),下面只要把图纸实例化,如例中把Person()类赋值给male这个变量,就代表Person()类实例化了。
下面只需要传递给male这个实例化对象两个参数就可以了,如例中传入名字john和28。
3、__init__到底啥用?
init代表初始化的意思,如上例子中,一是直接自动调用函数内部形参,二是啥呢?
二嘛,从字面理解,初始化。初始化是个什么鬼?
简单说,举个栗子,比如你要上战场了,不能凭着一腔赤血光着屁股就上战场吧?
你起码得先准备好弹药和粮草,然后考虑到战场的复杂性和地形的多变性,你得准备好钢盔和靴子吧?
再举个栗子,比如你玩一款RPG游戏,进游戏了,最先有个名字,但是你不能就一个名字闯天下吧?
最起码的属性呢?装备呢?再比如说天赋呢?加点呢?什么什么什么的,这些就是需要初始化的东西。
恍然大悟,卧槽,这东西不就是游戏界面里的东西吗?
对,这东西其实就是游戏的时候,需要提前跟你说明或者告诉你这是血条,这是蓝条,这是素质点,力量加攻击,敏捷加闪避的东西。
4、如果不用__init__可以吗?
完全可以,只要你不觉得调用麻烦,或者你也可以留着__init__不用,等到自己熟悉的时候再用。
5、定义的时候,一定要加个self吗?
之前也说了,self代表的是实例的本身,实例的本身其实就是函数定义时self的变量,也就是说,实例本身就是个变量。
定义函数的时候,自然可以不加,函数本身就代表它自己,但是定义类的时候,如果你不加self,怎么能区别出来实例化形形色色的人或建筑呢?
如果你觉得自己不爽,或者self太难写,你也可以写个有意思的变量,如lizi或者你任意喜欢的名字。
如以下代码:
不用init调用函数class Person():
def subs(ro,name,age):
ro.Xname = name
ro.Xage = age
print(f"你的名字是:{ro.Xname},你的年龄是{ro.Xage}")
person = Person()
person.subs("john","35")
或者使用init调用函数
class Person():
def __init__(我是一个例子,name,age):
我是一个例子.name = name
我是一个例子.age = age
print(f"你的名字是:{我是一个例子.name},你的年龄是{我是一个例子.age}")
male = Person("John","28")
也是可以的.
|