面向对象之方法(init方法)

方法

种类:普通方法,类方法,静态方法,魔术方法

1.普通方法格式:

def 方法名(self[,参数,参数]):

  pass

 函数和方法的区别:

类里面定义的就是方法,用法和函数是一模一样的

单独定义的就是函数

 1 # 关于self
 2 class Phone:
 3     brand = 'huawei'
 4     type = 'mate 30'
 5 
 6     # Phone类里面的方法:call
 7     def call(self):
 8         print('self------->', self)
 9         print('正在打电话')
10 
11 
12 phone1 = Phone()
13 print(phone1, '------1------')
14 phone1.call()

可以看到 self就是当前phone1对象本身

 1 # 关于self
 2 class Phone:
 3     brand = 'huawei'
 4     type = 'mate 30'
 5 
 6     # Phone类里面的方法:call
 7     def call(self):
 8         print('self------->', self)
 9         print('正在打电话')
10         print(self.note)
11 
12 
13 phone1 = Phone()
14 print(phone1, '------1------')
15 phone1.note = "我是phone1的note"
16 phone1.call()  # call(phone1) ----> self.note
17 
18 print("=" * 30)
19 
20 phone2 = Phone()
21 print(phone2, '------2------')
22 phone2.note = "我是phone2的note......"
23 phone2.call()   # call(phone2) ----> self.note

 可以看到不同的对象调用call(),call中的self,就会变成相应的对象本身

关于self的几点说明:

(1)self在对象的方法中表示当前对象本身,如果通过对象调用一个方法,那么该对象会自动传入到当前方法的第一个参数

(2)self并不是关键字,只是一个用于接受对象的普通参数,理论上可以用任何一个普通变量名代替

(3)方法中有self形参

 

 2.init方法

 怎么解决这样的问题呢?保证每个self中都有这样的price

首先来看这个语句p = Phone()执行背后的步骤:

1.找有没有一块空间是Phone

2.利用Phone类,向内存申请一块跟Phone一样的空间,如:0x78394NAB

3.去Phone中找有没有__init__(),如果没有则执行将开辟内存给对象名:p

4.如果有__init__,则会进入init方法,执行里面的动作,再之后,将内存地址赋值给对象p

 

 因此,每次创建对象的时候,系统会默认执行__init__()方法

 

 1 class Phone:
 2     # 系统的魔术方法之一,魔术方法的形式:__名字__()
 3     def __init__(self):  # init 初始的 初始化
 4         print("init------")
 5         self.brand = 'huawei'
 6         self.price = 4999
 7 
 8     def call(self):
 9         print('------->call')
10         print('价格:', self.price)  # 不能保证每个self中都存在price
11 
12 
13 p = Phone()  # 只要创建对象,系统会默认执行__init__()方法
14 p.call()
15 
16 p1 = Phone()
17 p1.call()

输出:

 通过__init__()保证每一个类创建的对象中(模型造出来的空间)里面肯定有brand和price的两个属性

注意:类中是没有这两个属性的

 

 

因此,每次可以动态给对象添加属性

如果我想改变brand,或者price属性的值,就可以直接p1.price = 5999,这样动态修改了

3.给init方法中传参数

 

 

 1 class Person:
 2     name = '张三'
 3 
 4     def __init__(self, name, age):
 5         self.name = name
 6         self.age = age
 7 
 8     def eat(self, food):
 9         print('{}正在吃{}'.format(self.name, food))
10 
11 
12 p = Person('李四', 14)
13 p.eat('猪肉')

输出:李四正在吃猪肉

原文地址:https://www.cnblogs.com/GumpYan/p/12354397.html