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()后,创建的每个实例都有自己的属性,也方便直接调用类中的函数。

  • 相关阅读:
    剑指Offer47 不用加减乘除做加法
    剑指Offer46 求1+2+...+n
    剑指Offer45 约瑟夫环
    剑指Offer44 扑克牌的顺子
    剑指Offer43 n个骰子点数概率
    面试题分享
    初识python版本
    redis安装部署
    配置本地yum源
    闭包、装饰器
  • 原文地址:https://www.cnblogs.com/wlyhy/p/10064514.html
Copyright © 2011-2022 走看看