python学习日志 2021年10月24日20点30分

关于__init__()方法的一些理解:

1.__init__()的第一种应用

        先上代码:

class Time:
    #__init__()方法在类实例化时会被自动调用
    def __init__(self):
       print(1)
    

代码执行,会有:

>>> t = Time()
1
>>> 

此即为__init__()方法的第一种应用,

在进行类的实例化时,__init__方法自动执行。此处,我们的__init__()方法会打印一个1,在实例化后就自动打印出来。

即使如此,__init__()方法不是第一个被调用的方法,若是使用了__new__()方法,__new__()方法会在__init__方法之前被调用,并且__new__()是所有方法中第一个被调用的(若是使用了)。

__new__()方法网上讲解很多,但是私以为,其更像盗版商和打印机。

顺便说一下:

如果此时在类的实例化时传入参数,则会报错,代码如下:

>>> n = Time(1)



Traceback (most recent call last):
  File "<pyshell#14>", line 1, in <module>
    n = Time(1)
TypeError: __init__() takes 1 positional argument but 2 were given

报错内容大概是:__init__()方法仅接收一个参数,却给了两个。

这里是因为,前文中对于__init__()方法定义时,仅定义了一个形式参数self,而在类的实例化时会自带一个self参数(它是隐形的,很酷!)。

2.__init__()的第二种应用

先上代码:

class Time:
 #__init__方法除了在类的实例化时自动被调用,同时也会吸收类的实例化时传入
 #方法的实际参数,并且表达出来,例:
    def __init__(self,hour = 0,minute = 0,second = 0):
        self.hour = hour
        self.minute = minute
        self.second = second

此处,我们将hour,minute和second三个形式参数写为关键字参数形式,即将其初始化为(0,0,0)(我这里写作元组形式,仅仅是为了方便表达,其值存储在内存中的形式仍不为我所知)

代码执行时,会有:

>>> n = Time(4)
>>> t.hour,t.minute,t.second
(4, 0, 0)

此处,与1中不同的是,我们传入了一个参数:4。这次没有报错,因为在__init__()定义时,我们写了的是:__init__(self,hour = 0,minute  = 0,second = 0 ),此处定义了总计四个参数。

但是我们仅仅传入一个参数,为何没有报错?这是因为,在python中,如果传入的参数小于定义的参数,就会从第一个往后算,传入一个就会被当做第一个形式参数。(我这里给的4,便被当作hour的值,并且在类中覆盖了初始定义的hour = 0,若是传入两个,则会覆盖hour和minute,以此类推)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值