zoukankan      html  css  js  c++  java
  • 构造函数的理解(构造函数与 init 方法)

    0. 构造函数与 init 方法

    • 构造方法内部禁止添加任何业务逻辑,如果有业务逻辑,请放在 init 方法中;

    1. 构造函数的参数

    以下为一个堆实现优先队列(堆的实现借助完全二叉树,而完全二叉树又可以通过线性表)的构造函数部分,提供一个表参数(默认为空的 list),使人可以为优先队列提供一些初始元素,

    class PriorityQueue:
        def __init__(self, elist=[]):
            self._elems = list(elist)
            ... 

    self._elems = list(elist) ,从 elist 出发做出一个表拷贝有以下一些意义:

    • 做拷贝使内部的表脱离原来的表,排除共享
    • 对默认情况,建立的是一个新的空表,

    2. 创建类对象实例,却不定义类对象实例的名称

    就像这样,

    class A: pass
    A()

    创建类对象实例,却不定义类对象实例的名称,仍然是有意义的,显然并不直接使用名称对对象进行操作。比如可以,在类的构造函数中,将 self 自身放进一个容器内部。

    >> class A:
    >>      def __init__(self, name, seq=[]):
    >>          self.name = name
    >>          seq.append(self)
    >> seq = []
    >> A('A1', seq)
    >> A('A2', seq)
    >> [s.name for s in seq]
    ['A1', 'A2']
  • 相关阅读:
    linux之awk命令
    HDU 2097 Sky数 进制转换
    HDU 2077 汉诺塔IV
    HDU 2094 产生冠军 dfs加map容器
    HDU 2073 叠框
    HDU 2083 简易版之最短距离
    HDU 2063 过山车 二分匹配
    天梯 1014 装箱问题
    天梯 1214 线段覆盖
    天梯 1098 均分纸牌
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9424079.html
Copyright © 2011-2022 走看看