zoukankan      html  css  js  c++  java
  • 「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岁的黑色的狗!

  • 相关阅读:
    虚拟主机导入MySQL出现Unknown character set: ‘utf8mb4’
    解决导入MySQL数据库提示"Unknown character set: 'utf8mb4'"错误
    织梦dedecms如何去除版权中的Power by DedeCms
    发送邮件常见出错代码及简单解决方法
    Hadoop集群配置(最全面总结)
    大数据下的数据分析平台架构
    跟上节奏 大数据时代十大必备IT技能
    Hive深入浅出
    深入解析:分布式系统的事务处理经典问题及模型(转载分享)
    数据分析≠Hadoop+NoSQL
  • 原文地址:https://www.cnblogs.com/wrxblog/p/9734059.html
Copyright © 2011-2022 走看看