zoukankan      html  css  js  c++  java
  • 面向对象编程-访问限制

    为了让class中的属性变量不被随意更改,增加__(双下划线)的方式使代码更加健壮

    #-*- coding:utf-8 -*-
    #main
    class Student(object):
    
        def __init__(self,name,score):
            self.__name=name
            self.__score=score
    
        def print_score(self):
            print('%s:%s' % (self.__name,self.__score))
    
        def get_name(self):
            return self.__name
    
        def get_score(self):
            return self.__score
    
        def set_score(self,score):
            if 0<=score<=100:
                self.__score=score
            else:
                raise ValueError('bad score')
    
    #exam
    class Student(object):
        def __init__(self,name,gender):
            self.__name=name
            self.__gender=gender
    
        def get_gender(self):
            return self.__gender
    
        def set_gender(self,gender):
            if gender=='male':
                self.__gender=gender
            elif gender=='female':
                self.__gender=gender
            else:
                raise ValueError('bad gender')
        
    # 测试:
    bart = Student('Bart', 'male')
    if bart.get_gender() != 'male':
        print('测试失败!')
    else:
        bart.set_gender('female')
        if bart.get_gender() != 'female':
            print('测试失败!')
        else:
            print('测试成功!')
    

      引用廖老师的一段话,关于访问限制:

      

      需要注意的是,在Python中,变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,所以,不能用__name____score__这样的变量名。

      有些时候,你会看到以一个下划线开头的实例变量名,比如_name,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。

      双下划线开头的实例变量是不是一定不能从外部访问呢?其实也不是。不能直接访问__name是因为Python解释器对外把__name变量改成了_Student__name,所以,仍然可以通过_Student__name来访问__name变量:

    >>> bart._Student__name
    'Bart Simpson'
    

      但是强烈建议你不要这么干,因为不同版本的Python解释器可能会把__name改成不同的变量名。

      总的来说就是,Python本身没有任何机制阻止你干坏事,一切全靠自觉。

  • 相关阅读:
    Win10 UWP Tile Generator
    Win10 BackgroundTask
    UWP Tiles
    UWP Ad
    Win10 build package error collections
    Win10 八步打通 Nuget 发布打包
    Win10 UI入门 pivot multiable DataTemplate
    Win10 UI入门 导航滑动条 求UWP工作
    UWP Control Toolkit Collections 求UWP工作
    Win10 UI入门 SliderRectangle
  • 原文地址:https://www.cnblogs.com/victorslave/p/10364210.html
Copyright © 2011-2022 走看看