init()方法意义重大的原因有两个。第一个原因是在对象生命周期中初始化是最重要的一步;每个对象必须正确初始化后才能正常工作。第二个原因是init()参数值可以有多种形式。

__init__方法使用

1.使用demo

初始化 。注意,这个名称的开始和结尾都是双下划线。
使用__init__方法
代码例子

#!/usr/bin/python
# Filename: class_init.py
class Person:
def __init__(self, name):
self.name = name
def sayHi(self):
print Hello, my name is, self.name
p = Person(Swaroop)
p.sayHi()
# This short example can also be written as Person(Swaroop).sayHi()

输出

$ python class_init.py
Hello, my name is Swaroop

它如何工作
这里,我们把__init__方法定义为取一个参数name(以及普通的参数self)。在这个__init__里,我们只是创建一个新的域,也称为name。注意它们是两个不同的变量,尽管它们有相同的名字。点号使我们能够区分它们。

最重要的是,我们没有专门调用__init__方法,只是在创建一个类的新实例的时候,把参数包括在圆括号内跟在类名后面,从而传递给__init__方法。这是这种方法的重要之处。

现在,我们能够在我们的方法中使用self.name域。这在sayHi方法中得到了验证。
       __init__方法类似于C 、C#和Java中的 constructor

2.注意点

注意1、__init__并不相当于C#中的构造函数,执行它的时候,实例已构造出来了。

class A(object):
def __init__(self,name):
self.name=name
def getName(self):
return 'A '+self.name

当我们执行

a=A('hello')

时,可以理解为

a=object.__new__(A)
A.__init__(a,'hello')

即__init__作用是初始化已实例化后的对象。

注意2、子类可以不重写__init__,实例化子类时,会自动调用超类中已定义的__init__

class B(A):
def getName(self):
return 'B '+self.name if __name__=='__main__':
b=B('hello')
print b.getName()

但如果重写了__init__,实例化子类时,则不会隐式的再去调用超类中已定义的__init__

class C(A):

    def __init__(self):

        pass

    def getName(self):

        return 'C
'+self.name   if __name__=='__main__':     c=C()     print c.getName()

则会报"AttributeError: 'C' object has no attribute 'name'”错误,所以如果重写了__init__,为了能使用或扩展超类中的行为,最好显式的调用超类的__init__方法

class C(A):

    def __init__(self,name):

        super(C,self).__init__(name)

    def getName(self):

        return 'C
'+self.name   if __name__=='__main__':     c=C('hello')        print c.getName()
 

参考链接:https://www.cnblogs.com/insane-Mr-Li/p/9758776.html

最新文章

  1. 通过三次优化,我将gif加载优化了16.9%
  2. javascript照片墙效果
  3. python读取数据库数据有乱码怎么解决?
  4. POJ 1847 Tram --set实现最短路SPFA
  5. mapreduce小结
  6. Controller接口
  7. linux svn迁移备份的三种方法
  8. 学习Python必须要知道的常用模块
  9. HTML表单综合实例
  10. web开发(Java&Jquery)实现验证码
  11. Intersecting Lines(数学)
  12. 《JAVASCRIPT高级程序设计》Ajax与Comet
  13. MVC页面静态化
  14. [BZOJ 4403]序列统计
  15. .Net MVC5异步请求Entity Framework 无限循环解决方法
  16. Inception体验之安装
  17. (七)jdk8学习心得之join方法
  18. 6-具体学习git--分支冲突,rebase|| stash 临时修改
  19. org.jeecgframework.core.common.exception.MyExceptionHandler]java.lang.NullPointerException
  20. opencv+python视频实时质心显示

热门文章

  1. Referenced file contains errors (xml文件第一行小红叉错误)
  2. Python 实现自动导入缺失的库
  3. FreeRTOS队列操作
  4. 如何打包ANE
  5. 微信支付接口--支付成功的回调--超详细Demo
  6. 【JUC】4.Synchronized与ReentrantLock对比
  7. linux删除同目录及子目录下统一扩展名的文件
  8. 日志管理与ftp。samba,nfs
  9. goroutine的使用与常见错误
  10. cesium-print 动态打印插件