概述
初学python,对与__init__方法和普通def name类方法产生了疑惑。
既然都是类方法,为什么要多此一举写个__init__呢?
当调用类时:
只要其所在的类被实例化了,__init__方法就会被执行。
相对的,我们都知道,类里面的方法,如果没有被调用到,它是不会被执行到的,而这个__init__方法却不需要明确调用即可被执行。
1.使用__init__方法
我们创建了一个叫做“人类”(Person)的类别,他有俩个必要属性(property):性别(gender)和年龄(age)
class Person:
def _init_(self,name,age):
self.name=name
self.age=age
运行结果:
可以看到,当我输入
p1=Person()
程序报错了,因为要创建一个人类新成员,你就必须输入性别和年龄这俩个必要选项。
而当我输入
p2=Person('James', 10)
有了_init_函数,每次我们创建人类这个类别的新的成员(Instance)时,我们就必须赋予gender和age这俩个参数--否则新的成员不能称作为“人类”
2.不使用__init__方法
是不是一定要使用_init_方程呢?
当然不是,但是,没有了这个方程,类别和成员的概念就变得稍许模糊。
下面我们创建一个class Student,里面包含def info()方法
class Student:
def info(self,name,age):
self.name=name
self.age=age
这个类没有_init_方程,因此,创建新成员stu1时,我们不需要输入任何的“属性”参数
stu1=Student()
这也导致了这个类定义的模糊--这个类别下的新成员stu1到底是什么?
反而,当我们在创建新成员试图输入“名字”和“年龄”这俩个“属性”时,程序报错了。
stu1=Student('mary',10)
因为,我们创建了一个我们对它毫无认知的新成员stu1
但是,这个类里有一个叫做info的方法,并且它有两个输入变量“name”和‘age’
我们可以尝试调用这个方程把stu1的name和age提出来
stu1=Student()
stu1.info('mary',10)
stu1.name
stu1.age
总结:why __init__?
如果不使用__init__,当我们为类传递参数时,类是无法识别这个参数是传递给哪个方法的,因此会报错,更无法进行调用,此时为了调用这种方法,我们得先写一行代码实例化,再写一行代码把参数传入某方法中,最后写一行代码进行调用这样过于繁琐。
最后看一个例子,感受加入__init__代码的简洁性
假如我们定义一个box类,有width,height,depth三个属性,以及计算体积的方法
solution 1
class Box:
def setdimension(self,width,height,depth):
self.width=width
self.height=height
self.depth=depth
def getvolume(self):
return self.width*self.height*self.depth
b=Box()
b.setdimension(10,20,30)
print(b.getvolume())
solution 2
class Box:
def __init__(self,width,height,depth):
self.width = width
self.height = height
self.depth = depth
def getvolume(self):
return self.width*self.height*self.depth
b=Box(20,30,40)
print(b.getvolume())
reference:Python中 __init__的通俗解释是什么? - 知乎
最后
以上就是友好芒果为你收集整理的Python中 __init__的通俗解释当调用类时: 总结:why __init__?的全部内容,希望文章能够帮你解决Python中 __init__的通俗解释当调用类时: 总结:why __init__?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复