美文网首页
【扫盲】18.关于Python中为什么要有init()函数?

【扫盲】18.关于Python中为什么要有init()函数?

作者: Queenie的学习笔记 | 来源:发表于2019-09-17 12:10 被阅读0次

    前言

    对于一个Python初学者,关于Python中为什么要有init()函数这个问题甚是纠结,不明白这个函数的意义。技术的学习过程中,一旦有某个知识点吃不透,接下来的学习都是困难重重,好在网上资源丰富,只要能想到如何描述你的问题,一般都可以找到一些有助于理解的蛛丝马迹。建议初学者将代码复制粘贴放到自己电脑下的Python运行环境下去执行,观察两段代码的运行结果的区别。

    示例来源: https://www.cnblogs.com/baxianhua/p/9996676.html,感谢作者

    本示例用于演示Python中【不用init()方法定义类】代码运行结果会有何不同

    1. 两段代码的功能都是【打印出矩形的周长和面积、dict中的内容】
    2. 两段代码不同点在于:
      代码一没有打印出dict的属性;
      代码二实现了dict属性的输出
    3. 结论:
      ① 通过print(rect.dict)来看实例的属性,代码一的结果是空的,按理来说它的属性应该是它的长、宽。但是它竟然没有,这就是没有定义init()的原因了;
      ② 在实例化对象的时候,rect = Rectangle()参数为空,没有指定a、b的值,只有在调用函数的时候才指定了,且类中定义的每个方法的参数都有a、b,这显然浪费感情,在类中直接指定方法就可以了;
      ③ 因此,需要在类中定义init()方法,方便创建实例的时候,需要给实例绑定上属性,也方便类中的方法(函数)的定义;
      ④ 定义完init()后,创建的每个实例都有自己的属性,也方便直接调用类中的函数。

    代码一

    print('代码一的运行结果:')
    class Rectangle():
        def getPeri(self,a,b):
            return (a + b)*2
        def getArea(self,a,b):
            return a*b 
    rect = Rectangle()
    
    print(rect.getPeri(3,4))
    print(rect.getArea(3,4))
    print(rect.__dict__)
    print('\n')
    

    代码二

    print('代码二的运行结果:')
    class Rectangle():
        def __init__(self,a,b):
            self.a = a
            self.b = b
    
        def getPeri(self):
            return (self.a + self.b)*2
    
        def getArea(self):
            return self.a*self.b
     
    rect = Rectangle(3,4)
    print(rect.getPeri())
    print(rect.getArea())
    print(rect.__dict__)
    print('\n')
    

    注:以下文章说的更加细致,适用于初学者有一定基础后再去反复理解文中的概念及思想。

    https://blog.csdn.net/Goldxwang/article/details/84475773

    相关文章

      网友评论

          本文标题:【扫盲】18.关于Python中为什么要有init()函数?

          本文链接:https://www.haomeiwen.com/subject/vfsnectx.html