Python中__init__的方法解惑

           本人最近开始学习Python,在使用Python写自己定义的类时,发现好多纠结的问题,一直习惯使用C++来写代码,换成Python还有一点不太习惯。

           __init__类似的方法有一点特殊,所有的名字的开头和结尾都有两个下滑线,这些方法都是特殊的方法。当有一个类的实例被创建时,__init__()方法会自动执行,在类实例创建完毕后执行,类似构造函数。__init__()可以被当成构造函数,他并不创建实例--它仅仅是你的对象创建后执行的第一个方法。它的目的是执行一些对象的必要的初始化工作。通过创建自己的__init__()方法,你可以覆盖默认的__init__()方法(默认的方法什么也不做),从而能够修饰刚刚创建的对象。

          什么是self ?它是类实例自身的引用,其他语言通常使用一个名为this的表示符,在self中自己可以任意添加任意类型的数据成员。self在Python里不是关键字。self代表当前对象的地址。self能避免非限定调用造成的全局变量。


        我们完全可以把__init__()方法比成类的构造函数,将self看成是类中的this指针,时刻作为类的指针,指向这个类的起始地址。


#encoding:utf-8

'''
Created on 2013-7-23

@author: Administrator
'''

class Person:
    def __init__(self):
        #print 'this is self id = %,in __init__' % (id(self));
        print "Hello in Constructor"
        
    def ShowSomething(self):
        print 'this is self id = %d' % (id(self))
        
if __name__ == '__main__':
    pass
else:
    print 'Hello Python in Main Function!'
    
    p = Person()
    print "The object address is %d" % id(p)
    p.ShowSomething()

看一下运行结果:

Finding files... done.
Importing test modules ... Hello Python in Main Function!
Hello in Constructor
The object address is 41428792
this is self id = 41428792
done.

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python的__init__构造方法是一个特殊的方法,用于在创建对象后进行初始化操作。它在对象创建后自动调用,并接收对象自身作为第一个参数(self),以及其他传递给构造方法的参数。 __init__方法通常在__new__方法创建对象后调用,用于设置对象的属性或执行其他初始化操作。它可以被子类重写以实现自定义的初始化逻辑。 举例来说,假设有一个类A,其定义了__init__方法。当我们创建一个A类的实例时,__init__方法会被自动调用,并对新创建的对象进行初始化操作。在__init__方法,我们可以为对象的属性赋初值,或者执行其他必要的初始化操作。 例如,在给定的示例,类A和类B都定义了__init__方法。当我们创建一个B类的实例b时,首先会调用A类的__new__方法创建对象,然后再调用A类和B类的__init__方法对对象进行初始化。在__init__方法,我们可以根据传入的参数对实例的属性进行赋值。 另一方面,如果我们在类A注释掉__new__方法的返回语句,就不会创建对象,只会调用__init__方法。这样,当我们创建一个A类的实例a时,只会执行__init__方法的代码,而不会调用__new__方法。这说明__new__方法和__init__方法在构造方法的执行顺序上是有区别的。__new__方法是用来创建对象,而__init__方法是用来初始化对象。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [python__new__和__init__的区别](https://blog.csdn.net/weixin_40734030/article/details/122863308)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值