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_理解与学习的更多相关文章

  1. 「python」: arp脚本的两种方法

    「python」: arp脚本的两种方法 第一种是使用arping工具: #!/usr/bin/env python import subprocess import sys import re de ...

  2. 「Python」socket指南

    开始 网络中的 Socket 和 Socket API 是用来跨网络的消息传送的,它提供了 进程间通信(IPC) 的一种形式.网络可以是逻辑的.本地的电脑网络,或者是可以物理连接到外网的网络,并且可以 ...

  3. 「Python」5个开源项目

    1-OpenAI universe Universe是一个能在世界上所有的游戏.网站和其他应用中,衡量和训练AI通用智能的软件平台. Universe,AI代理通过称为虚拟网络计算或VNC发送模拟的鼠 ...

  4. 「Python」为什么Python里面,整除的结果会是小数?

    2018-06-08 参考资料:Python学习笔记(4)负数除法和取模运算 先来看三个式子(!这是在Python3.0下的运算结果): 输出结果: ‘//’明明是整除,为什么结果不是整数,而会出现小 ...

  5. 「Python」pandas入门教程

    pandas适合于许多不同类型的数据,包括: 具有异构类型列的表格数据,例如SQL表格或Excel数据 有序和无序(不一定是固定频率)时间序列数据. 具有行列标签的任意矩阵数据(均匀类型或不同类型) ...

  6. 「Python」人脸识别应用

    人脸识别主要步骤: face_recognition 库的安装 安装此库,首先需要安装编译dlib,此处我们偷个懒,安装软件Anaconda(大牛绕过),此软件预装了dlib. 安装好后,我们直接通过 ...

  7. test「Python」流程&中文

    #例1 text='dShArpen骑草泥马在马勒隔壁玩Python时看到一群SB绿茶婊在逗逼,马上的他马上吓尿了' iftext = '马' for letter in text.decode('u ...

  8. 「汇编」加深理解段地址*10H(*16)必须是16的倍数

    王爽的汇编语言,有这样一道题: 检测点2.2 (2)  有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元.则SA应满足的条件是:最小为         , 最大为   ...

  9. 「Python」数据清洗常用正则

    对爬虫数据进行自然语言清洗时用到的一些正则表达式 标签中的所有属性匹配(排除src,href等指定参数) 参考链接 # \b(?!src|href)\w+=[\'\"].*?[\'\&quo ...

随机推荐

  1. JavaScript设计模式-----命令模式的简单应用

    命令模式是最简单和优雅的模式之一,命令模式中的命令(command)是指一个执行某些特定事情的指令. 应用场景:有时候需要向某些对象发送请求,但是并不知道请求的接受者是谁,也不知道被请求的操作是什么, ...

  2. python 抓取网页(一)

    #-------PYTHON获取网页内容-------------# import sys, urllib url = "http://www.baidu.com" #网页地址 w ...

  3. sprint1_11.15燃尽图(第二天)

    找相关的图片资料用于做点餐系统的界面 燃尽图:

  4. 【探路者】团队互评Alpha版本

    [探路者]组互评连接: 1互评作品:SkyHunter http://www.cnblogs.com/zej87/p/7802000.html 2互评作品:爱阅app http://www.cnblo ...

  5. 【每日scrum】NO.9

    (1)这是我们冲刺的最后一天,晚上我们的团队进行了收尾工作:第一阶段的任务基本完成,软件主要实现了校园景点照片以及对应的介绍,查询最短路径,查询涉及相关景点的查询,查询全部路径,基本界面的设计,导航功 ...

  6. 从入门到不放弃——OO第一次作业总结

    写在最前面: 我是一个这学期之前从未接触过java的小白,对面向对象的理解可能也只是停留在大一python讲过几节课的面向对象.幸运的是,可能由于前三次作业难度还是较低,并未给我造成太大的困难,接下来 ...

  7. lilntcode-508-摆动排序

    508-摆动排序 给你一个没有排序的数组,请将原数组就地重新排列满足如下性质 nums[0] <= nums[1] >= nums[2] <= nums[3].... 注意事项 请就 ...

  8. TCP系列51—拥塞控制—14、TLP、ER与拥塞控制

    一.概述 这里的重点是介绍TLP.ER与拥塞控制并不是介绍TLP和ER本身,因此TLP和ER的详细内容请翻前文. 在TLP与拥塞控制的交互中有几个点需要注意 1.TLP触发的重传后,TCP仍然处于Op ...

  9. arp_filter的验证,使用net namespace

    使用网络命名空间:net namespace 在namespace ns1中增加了两个网卡 sudo ip netns add ns1 sudo ip link add veth0 type veth ...

  10. Spring-MVC理解之二:前置控制器

    原文链接:http://www.cnblogs.com/brolanda/p/4265749.html 一.前置控制器配置与讲解 上篇中理解了IOC容器的初始化时机,并理解了webApplicatio ...