zoukankan      html  css  js  c++  java
  • Python的程序结构[0] -> 属性/Property[0] -> 类属性、实例属性和私有属性

    类属性、实例属性和私有属性


    Python中类的属性主要包括类属性,实例属性和私有属性,下面是对三种属性的简单介绍

    类属性 / Class Property


    类属性在__init__()之外初始化,在外部可以通过类,类实例进行调用, 在内部可以通过进行调用。

    在定义属性的过程中,尽量将各个实例共有的属性定义为类属性,因为定义为实例属性则在每一次实例化时都会初始化一次,为此定义为类属性可以减少内存加快运行速度

     

    实例属性 / Instance Property


    实例属性一般在__init__()内进行初始化,在外部可以通过实例进行调用, 在内部可以通过self进行调用。

    私有属性 / Private Property


    私有属性可分为两种,

    1. 单下划线_开头: 只声明这是私有属性,但依然可以从外部进行调用;
    2. 双下划线__开头: 外部无法直接调用,实际是转换成了_classname__propertyname

    私有属性不仅无法在外部直接进行调用,在继承时也无法相互访问私有属性,即子类无法直接继承父类私有属性,父类也无法直接访问子类的私有属性。

     

    代码示例


    以一个例子来介绍这三种属性的区别,

     1 class Foo():
     2     classProperty = 'classProperty'
     3     _privatePropertyCallable = 'privatePropertyCallable'
     4     __privateProperty = 'privateProperty'
     5     def __init__(self):
     6         self.instanceProperty = 'instanceProperty'
     7         self.__privateProperty = 'selfPrivateProperty'
    

    首先定义了一个 Foo 类,并在类中定义了三个类属性,和两个实例属性,其中 classProperty 为普通的类属性,而 _privatePropertyCallable 和 __privateProperty 为私有的类属性;同理,在初始化方法中,self.instanceProperty 为普通的实例属性,而 self.__privateProperty 为实例的私有属性,

    定义完成后对上面的 5 个属性分别进行调用,

    1 # Call class property
    2 print(Foo.classProperty)
    3 print(Foo().classProperty)
    4 # Call instance property
    5 print(Foo().instanceProperty)
    6 # Call private property
    7 print(Foo._privatePropertyCallable)
    8 print(Foo._Foo__privateProperty)
    9 print(Foo()._Foo__privateProperty)

    第 2 和第 3 行用类和类实例两种方式分别调用类属性,

    第 5 行用实例调用实例属性,值得注意的是,此处无法使用 Foo.instanceProperty 的方式来调用实例属性,

    第 7 行用类的方式调用了单下划线声明的私有属性,虽然可以实现调用,但在实际使用中却不被推荐,

    第 8 / 9 行则分别以类和类实例的方式,通过类名强行调用了各自的私有属性。

    最终的输出依次结果为

    classProperty
    classProperty
    instanceProperty
    privatePropertyCallable
    privateProperty
    selfPrivateProperty
  • 相关阅读:
    站立会议11(冲刺二)
    站立会议10(冲刺二)
    站立会议09(冲刺二)
    站立会议08(冲刺二)
    每日站立会议(一)
    四则运算--单元测试
    四则运算安卓版
    返回二维数组最大联通子数组的和
    团队项目成员和题目
    第五周学习进度
  • 原文地址:https://www.cnblogs.com/stacklike/p/8093337.html
Copyright © 2011-2022 走看看