zoukankan      html  css  js  c++  java
  • 面向对象(1)____私有公有 访问限制

    class Demo1():
        aa=123
        def __init__(self,name,score):
            self.name = name 
            self.score = score
        
        def func1(self):
            print(self.name,self.score)
    class Demo2():
        __aa=123
        def __init__(self,name,score):
            self.__name = name 
            self.__score = score
        
        def func1(self):
            print(self.__name,self.__score)    
    
    if __name__ =="__main__":
        demo1 = Demo1('jack',100)
        demo2 = Demo2('tom',200)
        demo1.func1()   # jack 100
        demo2.func1()   # tom 200
        print(demo1.name) #外部访问实例变量成功   public
        print(demo1.aa) #访问类属性成功          public
        #但是加了__双下划线的属性变量就变成私有的了 private 外部无法调用
        print(demo2.__aa)  #报错没有属性__aa
        print(demo2.__name) #报错没有属性__name
    
        #但是如果一定要访问还是能访问到的,但是不推荐  instance._classname__私有属性名
        print(demo2._Demo2__aa) #123

    如果还是需要访问private变量,建议定义 get set方法(类似于java),这样对数据也有校验,例子如下:

    class Student():
        def __init__(self):
            self.__score = None
        @property
        def score(self):
            return self.__score
        @score.setter
        def score(self,value):
            ####   这里可以加入赋值逻辑
            if not isinstance(value,int):
                raise ValueError('分数必须为整数')
            if value>100 or value<0:
                raise ValueError('分数不是合理区间')
            else:
                self.__score = value
        @score.deleter
        def score(self):
            del self.__score
    
    if __name__ =="__main__":
        a = Student()
        a.score = 56    #正常访问到setter方法
        print(a.score) # 正常访问到__score变量  56
    有些时候,你会看到以一个下划线开头的实例变量名,比如_name,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,
    但是,请把我视为私有变量,不要随意访问”。
  • 相关阅读:
    tzselect
    tzfile
    ttytype
    tty
    TRUNCATE
    true
    troff
    touch
    Open vSwitch
    Web 在线文件管理器学习笔记与总结(5)修改文件内容
  • 原文地址:https://www.cnblogs.com/alantammm/p/13679732.html
Copyright © 2011-2022 走看看