Python中 __init__的通俗解释

初学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__的通俗解释是什么? - 知乎

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值