Python之类和对象【一】(1.1-类的实例化 - 对象,self 是什么?调用类中的方法,__init__(self) 方法,self为什么不用传参?self是什么?)

文章目录

  • 前言
  • 一、类的实例化 - 对象
  • 二、self 是什么?
  • 三、调用类中的方法
  • 四、__init__(self)  方法
  • 五、疑惑:self为什么不用传参?self是什么?
  • 总结


前言

平时我们对类当中的细节不理解,这里就仔细剖析一下。


一、类的实例化 - 对象

1、结构:

变量名(对象名) = 类名()
1个类 = 可以创造多个对象。

2、区别:类的实例化 和 类的实例化对象

类的实例化:是一个过程,可以理解为:正在创造对象,还没有创造出来的这个过程。(举例:生孩子,孕育的过程。)


类的实例化对象:是一个结果。可以理解为:对象已经创造出来了。(举例:生孩子,孩子出生了。你看的见的实实在在的个体。)
 

二、self 是什么?

定义类的时候:
    参数self: 代表的是对象本身。在定义时不确定对象是谁,用self表示。
             在通过对象调用的时候,self=具体的对象名

提问:既然self代表对象本身,请问,在类内部,能否通过self访问对象的所有方法?
     可以!
     类内容,但凡是有self参数的方法,全部都可以访问。
            也可以通过self访问对象的所有属性

三、调用类中的方法

对象名.方法名() --- 使用对象的功能 - 调用方法

四、__init__(self)  方法

def __init__(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 就是实例化对象的本身;

那么为什么self不用传参呢?

我们可以还原一下:

从这里可以看出,self,是ATM类的一个对象。其实呢,我们用实例化去调用的时候,在这个函数的内部,self的位置,就自动被填入了对象。所以我们不用在调用方法的时候,专门去写这个self 的实际对象。即:

********不能这样写:********


总结

暂无

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值