赞
踩
平时我们对类当中的细节不理解,这里就仔细剖析一下。
1、结构:
变量名(对象名) = 类名()
1个类 = 可以创造多个对象。
2、区别:类的实例化 和 类的实例化对象
类的实例化:是一个过程,可以理解为:正在创造对象,还没有创造出来的这个过程。(举例:生孩子,孕育的过程。)
类的实例化对象:是一个结果。可以理解为:对象已经创造出来了。(举例:生孩子,孩子出生了。你看的见的实实在在的个体。)
定义类的时候:
参数self: 代表的是对象本身。在定义时不确定对象是谁,用self表示。
在通过对象调用的时候,self=具体的对象名
提问:既然self代表对象本身,请问,在类内部,能否通过self访问对象的所有方法?
可以!
类内容,但凡是有self参数的方法,全部都可以访问。
也可以通过self访问对象的所有属性
对象名.方法名() --- 使用对象的功能 - 调用方法
初始化方法:不需要你手动调用。它是自动调用的。在什么时候呢?在你创建对象的同时就调用了。
初始化方法的参数,在实例化对象的同时,要传参。
问题:对象的所有属性定义,建议全部在初始化方法当中...为什么不在其它的方法中定义??
因为属性在初始化方法里面定义好了后,在其他方法中就可以直接调用。就不用在每个方法里面再重新写一遍。
具体在ATM机类里面来解释:
# 创造一个ATM具体的对象 - 创造对象的过程 叫做实例化
# 对象名 = 类名() - 创造一个对象。
现在有一个ATM机,假设有两个功能:取款和存款 的功能
# 面临的问题:每一个方法里面,都有对card,passwd的统一判断处理。
# 代码重复了。那可不可以只写一个方法,就对card,passwd的统一判断处理
# 如果不处理,函数放在类内部,和放在类外面,没有什么区别。
解决方案一:
定义一个prepare方法,把所有其它的方法共同的代码部分,放到这里。
在每一个需要使用prepare的方法当中,去调用它。
存在的缺陷:每一个方法里面,都去重复调用prepare
附上代码:
- # 当不使用__init__(self)初始化方法时
- class ATM1:
- # 这个准备函数在下方的get_money,save_money都要被使用。因为,每调用一次方法都要去判断这个账号和密码是不是正确的。
- def prepare(self,account,password):
- if len(account) !=10 or len(password) !=6:
- print("账号或密码错误!")
- return
- else:
- self.account=account
- self.password=password
-
-
- def get_money(self, account,password,left_money, to_be_geted_money):
- self.prepare(account,password)
- if left_money >= 500:
- if to_be_geted_money < left_money:
- print(f"可以取{to_be_geted_money}元钱!")
- else:
- print("取出的钱大于余额")
- print(f"{to_be_geted_money - left_money}")
- else:
- print("余额不足!限定取钱的额度不能小于500!")
- print(self.account)
-
- def save_money(self,account, password,money_num):
- self.prepare(account, password)
- print(f"现在已经存入{money_num}元")
-
-
-
- a=ATM1()
- a.get_money("qazwsxedcr","111111",500,600)
- a.save_money("qazwsxedcr","111111",1000)
'运行
解决方案二:
def __init__(self) 初始化方法。 解决了不需要重复调用的问题。只定义一次,也只调用一次。
(这个调用,也就是在实例化对象的时候就调用了)
# 前提条件!!! 只有这个前提条件满足了,才可以用后面的 --- 初始化。(注意:在这里所说的这个前提条件满足,是指初始化方法,类实例化的时候,就要传数据。如果__init__()方法都不满足,就不会再去调用这个类里面其他的方法,说通俗一点就是在实例化的时候不去传值,就会报错,根本就不可能调用类里面的方法)
当不满足__init__(self)函数时:
其实这个self 就是实例化对象的本身;
那么为什么self不用传参呢?
我们可以还原一下:
从这里可以看出,self,是ATM类的一个对象。其实呢,我们用实例化去调用的时候,在这个函数的内部,self的位置,就自动被填入了对象。所以我们不用在调用方法的时候,专门去写这个self 的实际对象。即:
********不能这样写:********
总结
暂无
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。