zoukankan      html  css  js  c++  java
  • Python--面向对象之封装

    一 : 概述

      类中除了类似于name/age这样的普通变量之外,还可以有__hobby这样的变量,名为私有静态变量,相应的,也有这样的私有方法.

      私有变量只能在本类中访问,子类和对象都不能使用私有方法也是一样.

    class B:
        __money = 100000
    
    
    class A(B):
        name = 'alex'
        __age = 1000
    
        def func(self):
            print(self.__age)  # 对于私有静态字段,类的内部可以访问.
    
        def func1(self):
            print(self.__money)
            print(A.__money)
    
    
    a1 = A()
    
    print(a1.__age)  # AttributeError: 'A' object has no attribute '__age'
    a1.func()  # 1000
    a1.func1()  # AttributeError: 'A' object has no attribute '_A__money'

      通过a1.func1()这行的报错信息,我们可以看到,__money这个变量在内存中其实改名为_A_money了,这就是在类外部不能访问的原因,私有变量都改名了.既然如此,我们可以直接调用的时候使用这个实际的名字,但是,既然已经定义为私有变量了,目的就是不想让它在外部能用到的,所以千万不能用这种方式调用.

    二 : 私有方法

      私有方法的使用与私有变量的用法一致.

    class B:
        __money = 100000
    
        def __f1(self):
            print('B')
    
    
    class A(B):
        name = 'alex'
    
        def __func(self):
            print('func....')
    
        def func1(self):
            # self.__func()   # 类的内部可以访问
            self.__f1()
    
    
    a1 = A()
    a1.__func()  # 类外部不能访问
    a1.func1()  # 类的内部可以访问
    a1.func1()  # 类的派生类也不能访问.
  • 相关阅读:
    2020/5/8
    2020/5/8
    2020/5/6
    2020/4/30
    2020/4/29
    2020/4/28
    2020/4/27
    KMP算法详解
    博客搬家声明
    洛谷P2831 NOIP2016 愤怒的小鸟
  • 原文地址:https://www.cnblogs.com/DoingBe/p/9439799.html
Copyright © 2011-2022 走看看