python__init__方法笔记

简介: 本文总结了Python中`__init__`方法的使用要点,包括子类对父类构造方法的调用规则。当子类未重写`__init__`时,实例化会自动调用父类的构造方法;若重写,则需通过`super()`或直接调用父类名称来显式继承父类初始化逻辑。文中通过具体代码示例展示了不同场景下的行为及输出结果,帮助理解类属性与成员变量的关系,以及如何正确使用`super()`实现构造方法的继承。

python__init__方法笔记:

  • 子类需要自动调用父类的方法: 子类不重写init()方法,实例化子类后,会自动调用父类的init()的方法。
  • 子类不需要自动调用父类的方法: 子类重写init()方法,实例化子类后,将不会自动调用父类的init()的方法。
  • 子类重写init()方法又需要调用父类的方法: 使用super关键词:

ruby

体验AI代码助手

代码解读

复制代码

 super(子类,self).__init__(参数1,参数2,....)
 class Son(Father):
   def __init__(self, name):   
     super(Son, self).__init__(name)

简单的话来讲,可以理解为,类的属性如果直接写在类里面一般是要有值的

例如: class fun()

ini

体验AI代码助手

代码解读

复制代码

             a = 3

这样的情况下,类中的属性无法变成变量,当将类的属性以self.a的方式定义到初始化方法中,那属性也可以当成变量(或者理解为成员变量也可以是对象

例如:class fun()

scss

体验AI代码助手

代码解读

复制代码

            def __init__(self,a)
 
                   self.a = a
 
      f = fun(3)
 
       print(f.a)
1.子类不重写 init,实例化子类时,会自动调用父类定义的 init

ruby

体验AI代码助手

代码解读

复制代码

 class Father(object):
     def __init__(self, name):
         self.name=name
         print ( "name: %s" %( self.name) )
     def getName(self):
         return 'Father ' + self.name
  
 class Son(Father):
     def getName(self):
         return 'Son '+self.name
  
 if __name__=='__main__':
     son=Son('runoob')
     print ( son.getName() )

输出结果为:

yaml

体验AI代码助手

代码解读

复制代码

 name: runoob
 Son runoob
2.如果重写了init 时,实例化子类,就不会调用父类已经定义的 init,语法格式如下:

ruby

体验AI代码助手

代码解读

复制代码

 class Father(object):
     def __init__(self, name):
         self.name=name
         print ( "name: %s" %( self.name) )
     def getName(self):
         return 'Father ' + self.name
  
 class Son(Father):
     def __init__(self, name):
         print ( "hi" )
         self.name =  name
     def getName(self):
         return 'Son '+self.name
  
 if __name__=='__main__':
     son=Son('runoob')
     print ( son.getName() )

输出结果为:

体验AI代码助手

代码解读

复制代码

 hi
 Son runoob

3.如果重写了init 时,要继承父类的构造方法,可以使用 super 关键字:

scss

体验AI代码助手

代码解读

复制代码

 super(子类,self).__init__(参数1,参数2,....)

还有一种经典写法:

lua

体验AI代码助手

代码解读

复制代码

 父类名称.__init__(self,参数1,参数2,...)

ruby

体验AI代码助手

代码解读

复制代码

 class Father(object):
     def __init__(self, name):
         self.name=name
         print ( "name: %s" %( self.name))
     def getName(self):
         return 'Father ' + self.name
  
 class Son(Father):
     def __init__(self, name):
         super(Son, self).__init__(name)
         print ("hi")
         self.name =  name
     def getName(self):
         return 'Son '+self.name
  
 if __name__=='__main__':
     son=Son('runoob')
     print ( son.getName() )

输出结果为:

yaml

体验AI代码助手

代码解读

复制代码

 name: runoob
 hi
 Son runoobname: runoob
 hi
 Son runoob

\


转载来源:https://juejin.cn/post/7094996490619207687

相关文章
|
1月前
|
JSON 数据格式 Python
解决Python requests库POST请求参数顺序问题的方法。
总之,想要在Python的requests库里保持POST参数顺序,你要像捋顺头发一样捋顺它们,在向服务器炫耀你那有条不紊的数据前。抓紧手中的 `OrderedDict`与 `json`这两把钥匙,就能向服务端展示你的请求参数就像经过高端配置的快递包裹,里面的商品摆放井井有条,任何时候开箱都是一种享受。
57 10
|
2月前
|
Python
Python 中__new__方法详解及使用
__new__ 是 Python 中用于创建类实例的静态方法,在实例化对象时优先于 __init__ 执行。它定义在基础类 object 中,需传递 cls 参数(表示当前类)。__new__ 可决定是否使用 __init__ 方法或返回其他对象作为实例。特性包括:1) 在实例化前调用;2) 始终为静态方法。示例中展示了其用法及 Python2 和 Python3 的差异,强调了参数处理的不同。
111 10
|
2月前
|
Python
Python技术解析:了解数字类型及数据类型转换的方法。
在Python的世界里,数字并不只是简单的数学符号,他们更多的是一种生动有趣的语言,用来表达我们的思维和创意。希望你从这个小小的讲解中学到了有趣的内容,用Python的魔法揭示数字的奥秘。
82 26
|
2月前
|
存储 索引 Python
[oeasy]python093_find方法_指数为负数_index_实际效果
本文介绍了Python中`find`方法与索引(index)的使用,包括负数索引的实际效果。回顾了`eval`函数的应用,并强调类名如`str`、`int`、`list`不可用作变量名以避免覆盖。通过示例解析了负数索引在字符串和列表中的作用,以及`index`方法的三个参数(value、start、stop)的用法。同时对比了`index`和`find`方法的区别:`index`找不到子串时抛出`ValueError`,而`find`返回-1。最后总结了正负索引的使用场景及两者的特性,提供了相关学习资源链接。
311 8
|
2月前
|
Python
在VScode环境下配置Python环境的方法
经过上述步骤,你的VSCode环境就已经配置好了。请尽情享受这扇你为自己开启的知识之窗。如同你在冒险世界中前行,你的探索之路只有越走越广,你获得的知识只会越来越丰富,你的能力只会越来越强。
208 37
|
2月前
|
Python
Python 中__new__方法详解及使用
`__new__` 是 Python 中的一个特殊方法,用于控制对象的创建过程,在 `__init__` 之前执行。它是类的静态方法,负责返回一个实例。如果 `__new__` 不返回对象,`__init__` 将不会被调用。本文详细介绍了 `__new__` 的作用、特性及与 `__init__` 的区别,并通过实例演示了其在单例模式中的应用,同时对比了 Python2 和 Python3 中的写法差异。
|
3月前
|
机器学习/深度学习 数据可视化 算法
Python数值方法在工程和科学问题解决中的应用
本文探讨了Python数值方法在工程和科学领域的广泛应用。首先介绍了数值计算的基本概念及Python的优势,如易学易用、丰富的库支持和跨平台性。接着分析了Python在有限元分析、信号处理、优化问题求解和控制系统设计等工程问题中的应用,以及在数据分析、机器学习、模拟建模和深度学习等科学问题中的实践。通过具体案例,展示了Python解决实际问题的能力,最后总结展望了Python在未来工程和科学研究中的发展潜力。
|
3月前
|
数据采集 JSON API
Python 实战:用 API 接口批量抓取小红书笔记评论,解锁数据采集新姿势
小红书作为社交电商的重要平台,其笔记评论蕴含丰富市场洞察与用户反馈。本文介绍的小红书笔记评论API,可获取指定笔记的评论详情(如内容、点赞数等),支持分页与身份认证。开发者可通过HTTP请求提取数据,以JSON格式返回。附Python调用示例代码,帮助快速上手分析用户互动数据,优化品牌策略与用户体验。
|
3月前
|
数据采集 JSON API
Python 实战!利用 API 接口获取小红书笔记详情的完整攻略
小红书笔记详情API接口帮助商家和数据分析人员获取笔记的详细信息,如标题、内容、作者信息、点赞数等,支持市场趋势与用户反馈分析。接口通过HTTP GET/POST方式请求,需提供`note_id`和`access_token`参数,返回JSON格式数据。以下是Python示例代码,展示如何调用该接口获取数据。使用时请遵守平台规范与法律法规。
|
3月前
|
Python
解决Python报错:DataFrame对象没有concat属性的多种方法(解决方案汇总)
总的来说,解决“DataFrame对象没有concat属性”的错误的关键是理解concat函数应该如何正确使用,以及Pandas库提供了哪些其他的数据连接方法。希望这些方法能帮助你解决问题。记住,编程就像是解谜游戏,每一个错误都是一个谜题,解决它们需要耐心和细心。
179 15

推荐镜像

更多