zoukankan      html  css  js  c++  java
  • python之类与对象(3)

    4. 类的初始化函数__init__():

    本章参考:https://blog.csdn.net/hellocsz/article/details/82795514  原作者: 

    总结一下, 加上__init__()方法后,类才可以实例化,不加类就是个空壳,相当于一个方法集合

    学习Python的类,一直不太理解为什么一定要定义init()方法,现在简要谈一下自己的理解吧。

    1、不用init()方法定义类

    定义一个矩形的类,目的是求周长和面积。

    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__)

    得到结果:

    14

    12

    {}

    从上例中可以看到,我们在类中并没有定义init()方法,但是也能够得到类似的要求,结果返回了矩形实例rect的周长及面积。

    但是,我们通过print(rect.dict)来看这个实例的属性,竟然是空的,我定义了一个矩形,按理来说它的属性应该是它的长、宽。但是它竟然没有。这就是没有定义init()的原因了。

    并且,在实例化对象的时候,rect = Rectangle()参数为空,没有指定a、b的值,只有在调用函数的时候才指定了。且类中定义的每个方法的参数都有a、b,这显然浪费感情,在类中直接指定方法就可以了。、

    因此吧,需要在类中定义init()方法,方便创建实例的时候,需要给实例绑定上属性,也方便类中的方法(函数)的定义。

    2、用init()方法定义类

    上述同样的例子,采用init()方法定义类,如下:

    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__)

    得到结果:

    14

    12

    {'a': 3, 'b': 4}

    定义完init()后,创建的每个实例都有自己的属性,也方便直接调用类中的函数。

  • 相关阅读:
    std thread
    windows更新包发布地址
    How to set up logging level for Spark application in IntelliJ IDEA?
    spark 错误 How to set heap size in spark within the Eclipse environment?
    hadoop 常用命令
    windows 安装hadoop 3.2.1
    windows JAVA_HOME 路径有空格,执行软连接
    day01MyBatisPlus条件构造器(04)
    day01MyBatisPlus的CRUD 接口(03)
    day01MyBatisPlus入门(02)
  • 原文地址:https://www.cnblogs.com/wlyhy/p/10064514.html
Copyright © 2011-2022 走看看