zoukankan      html  css  js  c++  java
  • Python中的私有属性私有方法、类属性类方法以及单例设计模式

    私有属性是对象不希望公开的属性,私有方法是对象不希望公开的方法。在定义私有属性和私有方法时,在属性或者方法前,加上__(两个下划线)
    公有方法可以通过对象名直接调用,私有方法不能通过对象名直接调用,只能在属于对象的方法中通过self调用或在外部通过Python支持的特殊方式来调用

    继承中私有属性和私有方法问题:子类不能继承父类的私有属性,不能调用父类的私有方法。
    父类中的私有属性和私有方法:

    1.子类对象不能在自己的方法内部,直接访问父类的私有属性和私有方法
    2.子类对象可以通过父类的共有方法简介访问到私有属性或私有方法
    3.私有属性和私有方法是对象的隐私,不对外公开,外界以及子类都不能直接调用

    在外部访问父类的私有属性的方法

    这里写图片描述


    使用面向对象开发,第一步是设计类
    使用类名()创建对象,创建对象的动作有两步

    1.在内存中为 对象分配空间
    2.调用初始化方法为对象初始化

    对象创建后,内存中就有了一个对象的实实在在的存在
    因此:

    1.创建出来的对象叫做类的实例化
    2.创建对象的动作叫做实例化
    3.对象的属性叫做实例属性
    4.对象调用的方法叫做实例方法

    在程序执行时:

    1.对象各自拥有自己的实例属性
    2.调用对象的方法可以用self
    访问自己的属性 ,调用自己的方法

    结论:
    1.每一个对象都有自己独立的内存空间
    2.多个对象的方法,在内存中还有一份,在调用方法时,需要把对象的引用传递到方法内部


    类是一个特殊的对象:
    Python中一切皆对象

    在程序运行中,类会被加载到内存;在python中,类是一个特殊的对象–类对象
    除了封装实例的属性和方法外,类对象还可以拥有自己的属性和方法
    通过类名. 的方式可以直接访问类的属性或者调用类的方法

    【实例演示】

    这里写图片描述

    类属性就是针对类对象定义的属性,使用赋值语句在class关键字下方可以定义类属性,用于记录这个类的相关特性
    类方法就是针对类对象定义额方法,在类方法内部就可以直接访问类属性或者调用其他类方法

    语法如下:
    @classmethod
    def 类方法(cls):
    pass

    这里写图片描述

    【1】概念
    在开发时候,如果需要在类中封装一个方法,这个方法:
    即不需要访问实例属性或者调用实例方法,也不需要访问类属性或者调用类方法
    此时可以将这个方法封装成一个静态方法
    【2】基本语法

    语法如下:
    @staticmethod
    def 静态方法():
    pass

    静态方法需要用修饰器@staticmethod来标识,告诉解释器这是一个静态方法
    通过类名,调用静态方法

    这里写图片描述

    需求如下:
    这里写图片描述

    这里写图片描述
    案例小结:
    1.实例方法:方法内部需要访问实例属性
    2.类方法:方法内部需要访问类属性
    3.静态方法:方法内部不需要访问实例属性和类属性

    Q:如果方法内部,既要访问实例属性,又徐亚访问类属性,应定义什么方法?
    A:实例方法

    单例:让类创建的对象,在系统中只有唯一的一个实例

    使用类名()创建对象的时候,python的解释器首先会调用方法为对象分配空间
    是一个由object基类提供的内置的静态方法,主要有两个作用:

    1.在内存中为变量分配空间
    2.返回对象的引用


    python的解释器获得对象的引用后,新托福将引用作为第一个参数传给方法
    负责给对象分配空间 负责给对象初始化

    这里写图片描述

    这里写图片描述

  • 相关阅读:
    【Redis】搭建主从复制
    【安装】Ubuntu之Docker
    【安装】Ubuntu之MySQL
    【Docker】Dockerfile构建指令
    【Docker】常用命令
    【14】Flask 请求上下文
    【13】Flask 上下文前夕
    【12】Flask 分析线程和协程
    【11】Flask 高级进阶
    【10】Flask 高级摘要
  • 原文地址:https://www.cnblogs.com/zhangyanran/p/9896036.html
Copyright © 2011-2022 走看看