Home >  > Python __init__ 用法

Python __init__ 用法

0

学习Python的过程中,__init__ 的用法是一个难点,即使许多Python的书籍上,关于Python __init__ 用法也是写得十分拗口、难懂,今天终于找到一个关于Python __init__ 用法说明,我觉得说得很透彻,分享给大家。

一、不用__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
{}

但是,我们通过print(rect.dict)来看这个实例的属性,竟然是空的,我定义了一个矩形,按理来说它的属性应该是它的长、宽。但是它竟然没有。这就是没有定义init()的原因了。
并且,在实例化对象的时候,rect = Rectangle()参数为空,没有指定a、b的值,只有在调用函数的时候才指定了。且类中定义的每个方法的参数都有a、b,这显然浪费感情,在类中直接指定方法就可以了。

因此需要在类中定义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__后,创建的每个实例都有自己的属性,也方便直接调用类中的函数。

以下是以前自己写的版本:

__init__ 的意思是:initialize,初始化,因此可以理解实例化出某个类的对象时调用的初始化方法。

1、它位于类内部,可以让你在里面先做一些初始化工作,例如定义一些变量供后面的其它方法使用。

class Song():
    def __init__(self,lyrics):
        self.lyric = lyrics


    def sing_me_a_song(self):
        for line in self.lyric:
            print line

happy_baby = Song(['happy birthday to you',
                   'I do not want to get sued',
                   'So i will stop right there'])

bulls_on_parade = Song(['They rally around the family',
                        'with pockets full of shells'])

happy_baby.sing_me_a_song()
bulls_on_parade.sing_me_a_song()

2、定义类的时候,若是添加__init__方法,那么在创建类的实例的时候,实例会自动调用这个方法,一般用来对实例的属性进行初使化。比如:
Snap18120

只要其所在的类被实例化了,这个(特殊)方法就会被执行。 相对的,我们都知道,类里面的方法,如果没有被调用到,它是不会被执行到的,而这个(特殊)方法却不需要明确调用即可被执行。

Snap18121

 

三、文件夹中的__init__.py
比如,我们的foo/文件夹下面有许多的文件fooFactory.py, shortfoos.py, tallFoos.py,
通过在__init__.py中写代码,

__all__ = ['foofactories', 'tallFoos', 'shortfoos', 'medumfoos',
           'santaslittlehelperfoo', 'superawsomefoo', 'anotherfoo']
# deprecated to keep older scripts who import this from breaking
from foo.foofactories import fooFactory
from foo.tallfoos import tallFoo
from foo.shortfoos import shortFoo

则可以在别的脚本里简单方便的写:

from foo import fooFactory, tallFoo, shortFoo

简化了在其他地方的导入。

https://blog.csdn.net/djangor/article/details/39673659

暧昧帖

本文暂无标签

发表评论

*

*