• 数据和自省


    私有属性

    • 类里面定义的变量叫类属性,那么类属性有两种,分为:公有属性和私有属性
    • 私有属性定义:
      • 单下划线开头:_attr
      • 双下划线开通:__attr
    class Test:
        _attr = 100  #在外部可以直接访问
        __attr2 = 200  #外部不能直接访问,被改名成_Test__attr2  

    t = Test()
    # 查看该类的所有属性和方法
    print(Test.__dict__)

    在python中,并没有真正意义上的私有,只有伪私有;

    • python在给私有属性和私有方法命名时,实际是对名称做了一些特殊处理,是的外界无法访问到;
    • 处理方式:在名称前加上 _类名,即 _类名__名称

    父类的私有属性和方法

    • 子类对象不能在自己的方法内部,直接访问父类的私有属性和私有方法;
    • 子类对象可以通过父类的共有方法,间接访问到私有属性和私有方法。

    私有属性,方法,是对象的隐私,不对外公开,外界以及子类,都不能直接访问;
    私有属性,方法通常用来做一些内部的事情;

    • 子类对象,可以调用父类的公有方法和公有属性;
    • 而如果父类中的公有方法 有调用父类的私有属性的话,那么我们也可以通过调用父类的公有方法来间接调用父类的私有属性和方法。
    class Women:
        def __init__(self, name, age):
            self.name = name
            self.__age = age
    
        def __secret(self):
            print('私有:{}的年龄是{}'.format(self.name, self.__age))
    
        def public(self):
            print('公有:{}的年龄是{}'.format(self.name, self.__age))
            self.__secret()
    
    class Girl(Women):
        def test(self):
            print('你的名字是:{}'.format(self.name))
            # print("你的年龄是 % d" % self.__age)  # 不能在子类中直接调用父类的私有属性
            # self.__secret()  # 不能在子类中直接调用父类的私有方法
    
            # 可以通过调用父类的公有方法来简介调用父类的私有属性和方法
            super().public()  # 运行结果:(公有:xiaohong 的年龄是 18  私有:xiaohong 的年龄是 18)
            print("...")
    
    xiaohong = Girl('xiaohong', 18)
    # 子类的对象不能在外部直接调用父类/祖父类的私有属性和方法
    # print(xiaohong.__age)
    # print(xiaohong.__secret)
    xiaohong.test()
  • 相关阅读:
    范畴定义
    泛函编程(0)-什么是泛函编程
    函数式语言的特性
    理解函数式编程
    未阅归档
    monad-本质解释- a monad is a design pattern--monad与泛型相关
    打印管理系统
    函数式JS: 原来promise是这样的monad
    Promise是Monad吗?
    Scala和范畴论 -- 对Monad的一点认识
  • 原文地址:https://www.cnblogs.com/ella-li/p/14222942.html
Copyright © 2020-2023  润新知