python学习——类中为什么要定义__init__()方法

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

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

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

class    Rectangle():

    def    get    Peri(self,a,b):

        return (a + b)*2

    def    get    Area(self,a,b) :

        return a*brect = Rectangle()

print(rect.getPeri(3,4))

print(rect.getArea(3,4))

print(rect.__dict__)

1

2

3

4

5

6

7

8

9

10

得到结果:

1412{}

1

2

3

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

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

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

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

2、用init()方法定义类

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

classRectangle():

    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.brect=Rectangle(3,4)

print(rect.getPeri())

print(rect.getArea())

print(rect.__dict__)

1

2

3

4

5

6

7

8

9

10

11

12

13

得到结果:

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

1

2

3

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

上述两个程序的不同之处,还望像我一样的初学者细细体会。

class Ball:

    def setName(self, name):

        self.name = name

    def kick(self):

        print("我叫%s,该死的,谁踢我..." % self.name)

a = Ball()

a.setName('球A')

# 第一个参数self告诉Python是a对象在调用方法,因为是隐藏的并且由Python自己传入,所以我们这里不需要写进来。

b = Ball()

b.setName('球B')

c = Ball()

c.setName('土豆') # 这叫不按套路出牌

a.kick()

b.kick()

c.kick()

class Ball:

    def __init__(self,name):

        self.name=name

    def kick(self):

        print("我叫%s"%self.name)

a=Ball("223")

a.kick()

class Person:

    __name="少吃点"

    def __init__(self,name):

        self.name=name

    def a(name):

        return name

p=Person

print(p.a("f"))

你可能感兴趣的:(python学习——类中为什么要定义__init__()方法)