python:构造方法__init__( )

python魔法方法:__init__( )

1、__init__()方法称为构造方法,__init__()方法的魔力体现在只要实例化一个对象,这个方法就会在对象被创建时自动调用。

2、实例化对象时是可以传入参数的,这些参数会自动传入__init__()方法中,可以通过重写这个方法来自定义对象的初始化操作

总结:__init__()方法是一个特殊的方法,在对象实例化时会被调用,__init__()方法的作用是初始化

例1:

class Myclass:
    i = 123
    def __init__(self,friend):
        self.friend = friend

    def func(self,myself):    #带有参数的类方法
        self.myself = myself
        return self.myself +"say hello to " + self.friend

use_class = Myclass("xiaoming")
print("调用类的属性:",use_class.i)
print("调用类的方法:", use_class.func("xiaohong"))

#上面代码的输出结果为:
#调用类的属性: 123
#调用类的方法: xiaohongsay hello to xiaoming
1、在python中定义类时没有定义__init__( )方法,则在类实例化时系统会自动调用默认的构造方法(无参数的__init__( )方法),另外__init__( )方法可以有参数,参数通过__init__( )传递到类的实例化操作上

2、一个类中可以定义多个构造方法(__init__( )),但是实例化类时只会实例化最后的构造方法,即后面的构造方法会覆盖前面的构造方法,并且需要根据最后一个构造方法的形式进行实例化(参数与最后一个构造方法的参数一致)。因此一个类中最好只定义一个构造方法

3、初始化实例包括:定义和初始化实例属性或调用类的一些方法。

4、构造方法可以带有除self外的其它各种参数(关键字参数、默认参数、用元组收集参数、用字典收集关键字参数等),可以在实例化类时,传入对应的实参。



拓展:

类的方法定义

def fun_name(self,...);

      Pass
1、其中的 参数self代表类的实例,在调用方法时由系统自动提供

2、方法定义时必须指明self参数


 

类的方法的调用与普通的函数调用类似


1、类的内部调用: self.<方法名>(参数列表),或类名.方法名(参数列表)

2、在类的外部调用:<实例名> .<方法名>(参数列表)。

注意:以上两种调用方法中,提供的参数列表中都不用包括self。

class Num:
    def eat(self,name):
        self.name = name
        print("mmm and %s" % self.name)
    def speed(self):
        self.eat("nn")           #类中访问方法:self.方法名
        #Num.eat(self,"nn")      #类中访问方法:类名.方法名(self)

num = Num()
num.speed()
例2:
class Washer:
    def __init__(self):
        self.water = 0
        self.scour = 0

    def add_water(self, water):
        print('Add water:', water)
        self.water = water            #等号左边的表示实例的属性,右边是方法的形参

    def add_scour(self, scour):
        self.scour = scour
        print('Add scour:', self.scour)

    def start_wash(self):
        print('Start wash...')

if __name__ == '__main__':
    w = Washer()
    w.add_water(10)
    w.add_scour(2)
    w.start_wash()

#上面代码的输出结果为:
#Add water: 10
#Add scour: 2
#Start wash...

注:

这段代码中有self,water,scour三个参数,这个self表示对象本身( 谁调用,就表示谁)。语法上,类中的方法的第一个参数都是self,这是和普通方法区别的地方。这里self.water = water和self.scour = scour表示 将外部传来的water和scour,赋值给了self对象的water和scour属性( 将形参的名字定义的跟属性一致)

例3:

class Washer:
    def __init__(self, water=10, scour=2):
        self.water = water
        self.scour = scour

    def set_water(self, water):
        self.water = water

    def set_scour(self, scour):
        self.scour = scour

    def add_water(self):
        print('Add water:', self.water)

    def add_scour(self):
        print('Add scour:', self.scour)

    def start_wash(self):
        self.add_water()
        self.add_scour()
        print('Start wash...')


if __name__ == '__main__':
    wb = Washer(100, 10)
    wb.set_water(50)
    wb.set_scour(5)
    wb.start_wash()

#上面代码的输出结果为:
#Add water: 50
#Add scour: 5
#Start wash...

例4:

class  Num_add():
	a = 1                       #定义在类中但在函数体外的变量为类变量
    def __init__(self):         
        self.x = 4                  #这里的self.x,self.y就是实例变量
        self.y = 3
    def add(self):
        print(self.x + self.y)
number = Num_add()
number.add()

#上面代码的输出结果为:7

注:这是定义了两个变量x和y,并赋给实例self.x和self.y,在后面的所有函数中如果要用到这个两个变量,都需要通过self.x的写法来调用,并且函数的参数列表必须带有self,并且把实例传了进去。否则调用就会报错。

例5:

class Person:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def Introduce(self):
        #在函数内部访问自己的属性和方法
        print("我叫%s,今年%d岁" % (self.name, self.age))

p = Person("hao",20)
p.Introduce()
#上面代码的输出结果为:我叫hao,今年20岁
注:在类的内部,访问自己的属性和方法,都需要通过self,self就是外部对象在类内部的表示


猜你喜欢

转载自blog.csdn.net/qq_39314932/article/details/80721822