zoukankan      html  css  js  c++  java
  • [python]类与对象-下

    【实例对象】可以简称为【实例】

    一、类与对象的关系

    【类】是【对象】的模板。

    【类】就像工厂的模具,以它为模板,造出来的成千上万的产品,才是被我们消费、购买、使用,真正融入我们生活的东西。这些产品,在Python中就叫【实例对象】。

    Python中,万事万物都可以是对象,【类】这种模板层级的本身也是【对象】,但并不是【实例对象】。

    从模具变成产品,也就是从【类】变成【实例对象】的过程,就叫做【实例化】。

    二、类的实例化

    在上面的代码中,我们成功地录入和保存了3份成绩单。这个过程的专业描述是:把成绩单()类实例化为成绩单1成绩单2成绩单3三个【实例对象】。(15-17行代码是关键)

    通过这个例子,我们对“类的实例化”可以有一个比较直观的体会:

    要注意,当类需要被实例化后再使用时,和直接使用类的格式是不同的

    这是上一关直接使用类的格式:

    这是实例化后再使用的格式:

     

    通过对比可以看到,实例化后再使用的格式,①是空着的,意思是这里不再需要@classmethod的声明,并且在第②处,把cls替换成了self

    我们需要用实例名 = 类()的方式(实例名其实就是任取一个变量名),为类创建一个实例,然后再使用实例名.函数()的方式调用对应的方法。

    cls代表“类”的意思,self代表“实例”的意思,这样写是编码规范(程序员们的共识),但不是强制要求。理论上只要写个变量名占位,写什么都行,比如把self写成bbb

    总结:

    三、类和实例的关系(属性)

    类和实例的关系,就像母体和复制品的关系一样。当一个类实例化为多个实例后,实例将原封不动的获得类属性,也就是实例属性类属性完全相等。

    例如:

    我们可以修改类属性,这会导致所有实例属性变化(因为类是模板)。

     

    eg:修改类属性,实例属性也跟着变化

    我们也可以修改实例属性,但这不会影响到其他实例,也不会影响到类。因为每个实例都是独立的个体

    eg:

    新增类属性

    在类中新增属性会影响到实例,但在实例中新增属性只影响这个实例自己。

    新增实例属性----报错

     将会报错,因为增加实例属性不会影响到类

    练习题目;

    在上面,每个实例都是独立的个体。其中实例1.变量 = 10相当于修改了实例属性,所以类.变量 = 1不能影响到它,只能影响到实例2.变量。最终实例1.变量的值是10,实例2.变量的值是1。

    四、类方法和实例方法的关系

    1、重写类方法

    “重写类方法”分成两个步骤:第一个步骤是在类的外部写一个函数,第二个步骤是把这个新函数的名字赋值给类.原始函数

     

    要注意的是,这里的赋值是在替换方法,并不是调用函数,所以【不要加上括号】—— 写成类.原始函数() = 新函数()是错误的。

    eg:

    2、重写实例方法会报错

    五、实例的类属性和方法总结

    七、初始化函数

    初始化函数的意思是,当你创建一个实例的时候,这个函数就会被调用。上面的代码在执行实例 = 类()的语句时,就自动调用了init(self)函数。

    初始化函数的写法是固定的格式:中间是“init”,这个单词的中文意思是“初始化”,然后前后都要有【两个下划线】,然后init()的括号中,第一个参数一定要写上self,不然会报错。

    同时,这个初始化函数照样可以传递参数,如下

     八、类和对象案例应用(“类的实例化)

    功能说明:打印N*N*9乘法表(按照要求)

    代码如下,可供参考

    上面这个案例,我们通过初始化函数传递参数,从而控制了三三乘法表五五乘法表这些实例的打印行数,这里的数据流转图如下:

  • 相关阅读:
    String类
    try catch异常捕获
    while循环语句
    编程中穷举法的运用
    for循环例题
    编程中的 if ()else() 语句
    代位符
    运算符_及_运算符优先级
    C#中的类型转换
    Asp.net基础知识
  • 原文地址:https://www.cnblogs.com/mml-blog/p/10633266.html
Copyright © 2011-2022 走看看