前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python进阶-面向对象-中

Python进阶-面向对象-中

作者头像
小团子
发布2019-07-18 15:25:04
3530
发布2019-07-18 15:25:04
举报
文章被收录于专栏:数据云团数据云团

一、构造函数

构造函数是一种特殊的类成员方法,主要用来在创建对象时初始化对象,即为对象成员变量赋初始值。Python 中的类构造函数用 __init__ 命名,为 MyClass 添加构造函数方法,并实例化一个对象。

代码语言:javascript
复制
class MyClass(object):
  
  message = "数据云团"
  
  def __init__(self):
    print("初始化")
  
  def show(self):
    print(self.message)

inst = MyClass()
inst.show()

构造函数在 MyClass 被实例化时被 Python 解释器自动调用。

如果需要多种方式构造对象,则可通过默认参数的方式实现:

代码语言:javascript
复制
class MyClass(object):
  
  message = "数据云团"
  
  def __init__(self, name="unset", color="black"):
    print("初始化:", name, color)
  
  def show(self):
     print(self.message)

inst = MyClass()
inst.show()

inst2 = MyClass("小团")
inst2.show()

inst3 = MyClass("小团子", "Yellow")
inst3.show()

inst4 = MyClass(color="Green")
inst4.show()

上述代码中定义了 4个构造函数,分别接收 0、1、2个构造参数,之后分别通过不同的构造参数构造实例。

Python 中不能定义多个构造函数,但可以通过为命名参数提供默认值的方式达到用多种方式构造对象的目的。

二、析构函数

析构函数是构造函数的反向函数,在销毁对象时将调用它们。析构函数往往用来做“清理善后”的工作,例如数据库链接对象可以在析构函数中释放对数据库资源的占用。

Python 中为类定义析构函数的方法是在类中定义一个名字为 __del__ 的没有返回值和参数的函数。

与 Java 类似,Python 解释器的堆中存储着正在运行的应用程序所建立的所有对象,但是它们不需要程序代码来显式的释放,因为 Python 解析器会自动跟踪它们的引用计数,并自动销毁已经没有被任何变量引用的对象。Python 提供了显式销毁对象的方法:使用 del 关键字。

代码语言:javascript
复制
class MyClass(object):
  
  message = "数据云团"
  
  def __init__(self, name="unset", color="blank"):
    print("初始化:", name, color)
  
  def __del__(self):
    print("释放")
    
  def show(self):
    print(self.message)

inst = MyClass()
inst.show()

inst2 = MyClass("小团")
inst2.show()

# 用 del 释放对象时析构函数会自动被调用
del inst, inst2

inst3 = MyClass("小团子", "Yellow")
inst3.show()

# 用 del 释放对象时析构函数会自动被调用
del inst3

三、实例成员变量

之前的例子中,MyClass 类中的成员变量 message 是类成员变量,即 MyClass 类和所有 MyClass 对象共享该成员变量。

那么如何定义属于每个对象自己的成员变量呢?

在函数中定义 self 引用中的变量,这样的成员变量在 Python 中叫做实例成员变量。

代码语言:javascript
复制
class MyClass(object):
  
  message = "数据云团"
  
  def __init__(self, name="unset", color="black"):
    print("初始化:", name, color)
    self.name = name
    self.color = color
  
  def __del__(self):
    print("释放")
    
  def show(self):
    print(self.message)
    print("实例成员变量:", self.name, self.color)

inst2 = MyClass("小团")
inst2.show()

inst3 = MyClass("小团子", "Yellow")
inst3.show()

# 用 del 释放对象时析构函数会自动被调用
del inst2, inst3

在构造函数 __init__ 中定义了两个实例成员变量:self.name 和 self.color;在 MyClass 的成员函数中可以直接使用这两个成员变量,通过实例名也可以访问到实例成员变量。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据云团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档