「Python」_init_理解与学习
Python是面向对象的编程语言,因此我从Class、Instance以及属性(property/attribute)的角度出发解释。
_init_根据其英文意思(initialize),用来初始化一个类(class)的新成员(instance),它是一个constructor.
当新成员被创建时,这个方程会自动被调用。
仅举俩个(极端的)例子作对比,为了不复杂化导致混淆,建议只看1~
1,使用_init_方程
我们创建了一个叫做“人类”(Person)的类别,他有俩个必要属性(property):性别(gender)和年龄(age)
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
有了_init_函数,每次我们创建人类这个类别的新的成员(Instance)时,我们就必须赋予gender和age这俩个参数--否则新的成员不能称作为“人类”~
(注:self是一个指向对象的指针)
请看程序运行案例:
可以看到,当我输入
p1=Person()
程序报错了,因为要创建一个人类新成员,你就必须输入性别和年龄这俩个必要选项。
而当我输入
p2=Person('James', 10)
程序运行成功了,一个10岁的名叫James的人类新成员被创建成功!
并且你可以通过输入
p2.name
p2.age
来查看这位新成员的名字和年龄。
2,不使用_init_方程
是不是一定要使用_init_方程呢?
当然不是,但是,没有了这个方程,类别和成员的概念就变得稍许模糊。
下面我们创建了一个叫做Anthing(任何生物)的类别,该类别没有“属性”,有一个方程init_person以及方程的俩个变量name和age。
class Anything:
def init_person(self, _name, _age):
self.name= _name
self.age = _age
这个类没有_init_方程,因此,创建新成员a2时,我们不需要输入任何的“属性”参数
a2=Anything()
这也导致了这个类定义的模糊--这个类别下的新成员a2到底是神马?(这里我们叫它anything)
反而,当我们在创建新成员试图输入“名字”和“年龄”这俩个“属性”时,程序报错了。
a1=Anything('Dick', 5)
因此,我们创建了一个我们对它毫无认知的新成员a2。
但是,这个类里有一个方程叫做“创建人类成员”(init_person),并且它有俩个输入变量“名字”和“年龄”。
我们尝试调用这个方程把a2“变成”一个人类:
a2.init_person('Dick', 5)、
编译通过了,a2变成了一个5岁的叫Dick的人类。
并且你可以通过输入
a2.name
a2.age
来查看它的名字和年龄。
俩点注意处:
1.这个叫Dick的人其实是init_person()这个方程“创造”的。
2. 在Anything这个类下,我们还可以定义其他方程
def init_dog(self, _color, _age):
self.color = _color
self.age = _age
这个时候,如果我们运行
a2.init_dog('Black', 4)
那么,a2这个成员又变成了一条4岁的黑色的狗!
「Python」_init_理解与学习的更多相关文章
- 「python」: arp脚本的两种方法
「python」: arp脚本的两种方法 第一种是使用arping工具: #!/usr/bin/env python import subprocess import sys import re de ...
- 「Python」socket指南
开始 网络中的 Socket 和 Socket API 是用来跨网络的消息传送的,它提供了 进程间通信(IPC) 的一种形式.网络可以是逻辑的.本地的电脑网络,或者是可以物理连接到外网的网络,并且可以 ...
- 「Python」5个开源项目
1-OpenAI universe Universe是一个能在世界上所有的游戏.网站和其他应用中,衡量和训练AI通用智能的软件平台. Universe,AI代理通过称为虚拟网络计算或VNC发送模拟的鼠 ...
- 「Python」为什么Python里面,整除的结果会是小数?
2018-06-08 参考资料:Python学习笔记(4)负数除法和取模运算 先来看三个式子(!这是在Python3.0下的运算结果): 输出结果: ‘//’明明是整除,为什么结果不是整数,而会出现小 ...
- 「Python」pandas入门教程
pandas适合于许多不同类型的数据,包括: 具有异构类型列的表格数据,例如SQL表格或Excel数据 有序和无序(不一定是固定频率)时间序列数据. 具有行列标签的任意矩阵数据(均匀类型或不同类型) ...
- 「Python」人脸识别应用
人脸识别主要步骤: face_recognition 库的安装 安装此库,首先需要安装编译dlib,此处我们偷个懒,安装软件Anaconda(大牛绕过),此软件预装了dlib. 安装好后,我们直接通过 ...
- test「Python」流程&中文
#例1 text='dShArpen骑草泥马在马勒隔壁玩Python时看到一群SB绿茶婊在逗逼,马上的他马上吓尿了' iftext = '马' for letter in text.decode('u ...
- 「汇编」加深理解段地址*10H(*16)必须是16的倍数
王爽的汇编语言,有这样一道题: 检测点2.2 (2) 有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元.则SA应满足的条件是:最小为 , 最大为 ...
- 「Python」数据清洗常用正则
对爬虫数据进行自然语言清洗时用到的一些正则表达式 标签中的所有属性匹配(排除src,href等指定参数) 参考链接 # \b(?!src|href)\w+=[\'\"].*?[\'\&quo ...
随机推荐
- 第八次ScrumMeeting博客
第八次ScrumMeeting博客 本次会议于11月2日(四)22时整在3公寓725房间召开,持续20分钟. 与会人员:刘畅.辛德泰.窦鑫泽.张安澜.赵奕.方科栋. 1. 每个人的工作(有Issue的 ...
- ES6的新特性(6)——正则的扩展
正则的扩展 RegExp 构造函数 在 ES5 中,RegExp构造函数的参数有两种情况. 第一种情况是,参数是字符串,这时第二个参数表示正则表达式的修饰符(flag). var regex = ne ...
- 手机上Uncaught ReferenceError: __WEBPACK_AMD_DEFINE_ARRAY__ is not defined的错误
问题: vue2.0和webpack2.X的写的项目在电脑的浏览器上打开正常,在手机浏览器中访问页面的时候不能正常显示,空白. 通过chrome的真机调试chrome://inspect/#devic ...
- Scrum立会报告+燃尽图(Beta阶段第四次)
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2386 项目地址:https://coding.net/u/wuyy694 ...
- 20172305 2018-2019-1 《Java软件结构与数据结构》第九周学习总结
20172305 2018-2019-1 <Java软件结构与数据结构>第九周学习总结 教材学习内容总结 本周内容主要为书第十五章内容: 图(结点和结点之间的连接构成) 顶点:结点 边:结 ...
- 《JavaScript》页面跳转
window.location.href: <i onclick="window.location.href = '/Form/Form_Write/Index?viewname=Fo ...
- 寒假作业2:简化电梯设计elevator
Github仓库地址:hua-kui 寒假学习计划:学习计划 - 题目背景 一栋10层的大楼(楼层编号1-10),设有一台无限载重的电梯,初始时电梯停在1层.电梯移动1层的耗时为1,在某一层停靠的耗时 ...
- 线段树-hdu2795 Billboard(贴海报)
hdu2795 Billboard 题意:h*w的木板,放进一些1*L的物品,求每次放空间能容纳且最上边的位子 思路:每次找到最大值的位子,然后减去L 线段树功能:query:区间求最大值的位子(直接 ...
- Java实现的词频统计——单元测试
前言:本次测试过程中发现了几个未知字符,这里将其转化为十六进制码对其加以区分. 1)保存统计结果的Result文件中显示如图: 2)将其复制到eclipse环境下的切分方法StringTokenize ...
- 设计模式php篇(一)————单例模式
话不多说,直接上代码: <?php namespace DesignPattern; /** * php设计模式之单例模式 */ class SingleInstance { private s ...