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']

构造函数的理解(构造函数与 init 方法)的更多相关文章

  1. C++-理解构造函数、析构函数执行顺序

    先初始化序列中的函数调用,如果基类构造函数为非引用传递,则引起参数的拷贝构造 再: 先类内的成员构造函数(拷贝/默认),再类的构造函数:先基类,再派生类: 本文主要说明对象创建时构造函数的执行顺序,对 ...

  2. 转 关于C#中派生类调用基类构造函数的理解

    关于C#中派生类调用基类构造函数的理解 .c#class       本文中的默认构造函数是指在没有编写构造函数的情况下系统默认的无参构造函数 1.  当基类中没有自己编写构造函数时,派生类默认的调用 ...

  3. C#--构造函数的理解

    说白了构造函数就是用来初始化类的数据成员{因为C#语言具有类型安全的特质-->不能使用没有初始化的变量)} 在这里引用一下别人的总结,我觉得挺好的: 构造函数是一种特殊的成员函数,它主要用于为对 ...

  4. C++ 类的多态一(virtual关键字--构造函数深刻理解)

    //virtual关键字--构造函数深刻理解 #include<iostream> using namespace std; /* C语言编译器,c++编译器全部是静态链编,就是一段一段代 ...

  5. C++拷贝构造函数 的理解

    #include <iostream> using namespace std; //拷贝构造函数的理解 class Point { public: Point(); Point(int ...

  6. 对C# 构造函数的理解

    C#构造函数是在创建给定类型的对象时执行的类方法. 构造函数具有与类相同的名称,它通常初始化新对象的数据成员.不带参数的构造函数称为“默认构造函数”. 无论何时,只要使用 new 运算符实例化对象,并 ...

  7. C++中的构造函数,拷贝构造函数和赋值运算

    关于C++中的构造函数,拷贝构造函数和赋值运算,以前看过一篇<高质量C++/C编程指南>的文章中介绍的很清楚,网上能搜索到,如果想详细了解这方面的知识可以参看一下这篇文章. 常见的给对象赋 ...

  8. C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容

    一.本文目的与说明 1. 本文目的:理清在各种继承时,构造函数.复制构造函数.赋值操作符.析构函数的执行顺序和执行内容. 2. 说明:虽然复制构造函数属于构造函数的一种,有共同的地方,但是也具有一定的 ...

  9. C++类中函数(构造函数、析构函数、拷贝构造函数、赋值构造函数)

    [1]为什么空类可以创建对象呢? 示例代码如下: #include <iostream> using namespace std; class Empty { }; void main() ...

随机推荐

  1. COGS——T 1175. [顾研NOIP] 旅游电车

    http://www.cogs.pro/cogs/problem/problem.php?pid=1175 ★★☆   输入文件:buss.in   输出文件:buss.out   简单对比时间限制: ...

  2. [React] Work with HTML Canvas in React

    React's abstraction over the DOM means that it's not always obvious how to do DOM-related things, li ...

  3. Request的getParameter和getAttribute方法的差别

    HttpServletRequest.getParameter("modelName");能取到想要的modelObject吗?经过測试之后.发现是不能的. 后来想想.其它道理挺简 ...

  4. 用自定义的函数将gps转换为高德坐标

    <?php echo<<<_END <!doctype html> <html> <head> <meta charset=" ...

  5. iOS CoreData介绍和使用(以及一些注意事项)

    iOS CoreData介绍和使用(以及一些注意事项) 最近花了一点时间整理了一下CoreData,对于经常使用SQLite的我来说,用这个真的有点用不惯,个人觉得实在是没发现什么亮点,不喜勿喷啊.不 ...

  6. zzulioj--1790-- 弹珠游戏(数学水题!)

    弹珠游戏 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 14  Solved: 10 SubmitStatusWeb Board Descriptio ...

  7. angular4(2-2)angular脚手架引入第三方类库(swiper)

    试了好多方法,npm install 方法失败了,下载到本地是可以使用的: 将swiper文件放到assets文件下: 项目目录下:(命令行) 因为ts并不能准确识别js语法,所以需要用ts中的int ...

  8. Kettle学习系列之kettle的下载、安装和初步使用(windows平台下)(图文详解)

    不多说,直接上干货! kettle的下载 žKettle可以在http://kettle.pentaho.org/网站下载                   http://sourceforge.n ...

  9. Spark Streaming 总结

    这篇文章记录我使用 Spark Streaming 进行 ETL 处理的总结,主要包含如何编程,以及遇到的问题. 环境 我在公司使用的环境如下: Spark: 2.2.0 Kakfa: 0.10.1 ...

  10. http状态码304

    服务器对客户端返回HTTP/1.1 304  意思是服务端告诉客户端 我的的缓存没有改变你不需要来取了,就用你自己本地的吧! 浏览器的三种缓存协商机制: if-modified-since (基于最后 ...