Python面向对象深化(上)

描述

前言

哈喽, 大家好, 我是了不起!

欢迎大家来观看了不起的冒险之旅. 为了方便起见, 文中以小知为名. 讲述了不起在Python异世界的冒险之旅.

天空之城是座高耸云端的城堡. 位于西海岸附近, 在城堡的最顶端可以眺望到天空之海. 直到格兰之森那场大火的发生,使得围绕在它周围的魔法阵力量减弱,人们才终于重新看到天空之城的真实模样. 当时,关于天界的传闻甚至比天上的繁星还多,但是却没有一个人能够证明它真实存在。


实例对象和类对象创建过程内存分析

我们以下面代码为例,分析整个创建过程:

class Student:

    company = "sxd"  # 类属性

    count = 0  # 类属性

    def __init__(self, name, score):

        self.name = name  # 实例属性

        self.score = score

        Student.count = Student.count + 1

    def say_score(self):  # 实例方法

        print("我的公司是: ", Student.company)

        print(self.name, "的分数是: ", self.score)

s1 = Student("时间静止", 18)    # s1是实例对象, 自动调用__init__()方法

s2 = Student("不是简史", 81)

s1.say_score()

print('一共创建{0}个Student对象'.format(Student.count))

print("s1的引用:", id(s1))

print("s2的引用:", id(s2))

print("Student的引用:", id(Student))

 

python

默认的类方法

init 构造方法和__new__ 方法

初始化对象, 我们需要定义构造函数 __init__() 方法 构造方法用于执行“实例对象的初始化工作”, 即对象创建后, 初始化当前对象的相关属性, 无返回值 如果将对象比作一座房子, 则构造方法(__init__)是负责初始化(装修) , 不是建对象(房子)

__init__() 的要点如下(约等于Java的构造方法):

  1. 名称固定, 必须为:  __init__()
  2. 第一个参数固定, 必须为:  self . self 指的就是刚刚创建好的实例对象
  3. 构造函数通常用来初始化实例对象的实例属性 通过“类名(参数列表)”来调用构造函数. 调用后, 将创建好的对象返回给相应的变量. 比如:  s1 = Student("时间静止", 80)
  4. __init__() 方法: 初始化创建好的对象, 初始化指的是: "给实例属性赋值"
  5. 如果我们不定义 __init__ 方法, 系统会提供一个默认的 __init__ 方法. 如果我们定义了带参的 __init__ 方法, 系统不创建默认的 __init__ 方法
  6. __new__() 方法: 用于创建对象, 但我们一般无需重定义该方法

注意:

  • Python中的 self 相当于C++中的 self指针 , JAVA和C#中的 this 关键字
  • Python中,  self 必须为构造函数的第一个参数, 名字可以任意修改, 但一般都叫做 self.他的作用是指向当前对象的本身/当前对象的引用

__del__方法(析构函数)和垃圾回收机制

__del__() 称为“析构方法”, 用于实现对象被销毁时所需的操作. 比如: 释放对象占用的资源, 例如: 打开的文件资源、网络连接等

注意:

  1. Python实现自动的垃圾回收, 当对象没有被引用时(引用计数为0), 由垃圾回收器调用 __del__()
  2. 我们也可以通过 del语句 删除对象, 从而保证调用 __del__()
  3. 系统会自动提供 __del__方法 , 一般不需要自定义析构方法.

实操代码

class Person:

    def __del__(self):

        print("销毁对象: {0}".format(self))

p1 = Person()

p2 = Person()

del p2

print("程序结束")

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分