zoukankan      html  css  js  c++  java
  • 9.面向对象:类和对象、实例变量、类变量


    类和对象:

    • 类的定义:用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
    • 类的优势:将一个对象的功能集中于一体,便于操作,降低了代码的重复。
    • 实例化:创建一个类的实例,类的具体对象。
    • 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

    使用 class 语句来创建一个新类:

    class Dog:
        #self 代表的是类的实例,代表当前对象的地址
        def __init__(self,name):##称为类的构造函数,进行初始化成员变量
            self.name=name
        def bulk(self):###自定义函数
            print("%s:汪汪!"%self.name)
    
    d1=Dog("奥巴马")##创建对象,传入__init__所需的变量,self默认自动传入
    
    d1.bulk()#调用方法
    print(d1)

    为什么要有self:

    以类变量和实例变量为解释,对于共有属性,一般会在共有部分定义,不需要__init__,而比如说因为人人都有自己的名字,那么名字应该是一个人私有的。而类的函数由于为了节约资源,并不会拷贝给每一个对象,每一个对象都要从类的定义区中调用方法,对于涉及对象特有属性的方法,调用方法的时候必须传入自身对象self才能使函数获得私有的数据,而调用这个私有的数据使用”self.变量名”.

    image

    附:

    什么是新式类:https://www.cnblogs.com/wenbronk/p/7141224.html


    实例变量和类变量:

    • 实例变量是对于每个实例都独有的数据,而类变量是该类所有实例共享的数据
    • 变量使用的顺序是:实例变量--》类变量,如果实例变量中没有才会去类变量中找
    • 但即使是类中的变量,也是需要使用self.变量名来使用
    class Dog:
        age=8
        def __init__(self,name):
            self.name=name
        def bulk(self):
            print("汪汪")
    
    d1=Dog("包子")
    d2=Dog("馒头")
    d1.age=10
    print("Dog:",Dog.age,"	D1:",d1.age,"	D2:",d2.age)
    
    
    -------------------------
    结果:
    Dog: 8     D1: 10     D2: 8
    • 节约论:python为了简洁性,不会复制一份类的数据给每一个对象,每一个对象之后存有其特有的属性,当其需要使用属性或方法时,先看自己有没有,如果没有再去类中找


    类变量的创建:

    • 可以在声明类的时候定义

    image

    • 也可以使用赋值来定义:

    image

    image


    实例变量的创建:

    • 可以在__init__中定义

    image

    • 也可以使用赋值来定义:

    image


  • 相关阅读:
    Java反射机制
    dd命令
    分区工具fdisk,gdisk,parted
    硬盘初识
    shell脚本之算术运算和逻辑运算
    linux防火墙简单的使用
    压缩解压打包工具基础
    find命令基础讲解
    个人数据备份方案
    数据库的表名字段名大小写问题
  • 原文地址:https://www.cnblogs.com/progor/p/8419345.html
Copyright © 2011-2022 走看看