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()  # 类的派生类也不能访问.

猜你喜欢

转载自www.cnblogs.com/DoingBe/p/9439799.html