我是靠谱客的博主 无辜秀发,最近开发中收集的这篇文章主要介绍Python基础-python中的访问权限(私有化)/property使用(get/set方法)(13),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

几个概念:

  • 名字重整:

比如有一个Test类,定义了私有属性__name,并实例化了对象a,无法调用该属性。
我们可以看到__name属性的名字被变成_Test__name,这就是名字重整。

  • 魔法属性/方法:

魔法方法就如同它的名字一样神奇,总能在你需要的时候为你提供某种方法来让你的想法实现。魔法方法是指Python内部已经包含的,被双下划线所包围的方法,这些方法在进行特定的操作时会自动被调用,它们是Python面向对象下智慧的结晶。

私有化

  • xx:公有变量,相当于java中的public

  • _x:单前置下划线,私有方法或者属性,from 模块 import *时禁止导入,类对象和子类可以访问,相当于java中的protected,只不过没有包访问权限

  • __xx:前置双下划线,避免与子类的属性命名冲突,无法在外部直接访问(名字重整所以访问不到),相当于java的private

  • __ xx__:前后双下划线,用户名字空间的魔法对象或属性,如__init__,不要自己发明这样的。

  • xx_:单后置下划线,避免与py关键字冲突,不推荐使用。

class Test(object):
    def __init__(self,name):
        #私有的属性
        self.__name=name
    #私有方法
    def __fun(self):
        pass
test=Test('11')
#__dict__可以检查一个对象的所有属性
print(test.__dict__) #{'_Test__name': '11'}

get和set方法:

  • 第一种:
class Test(object):
    def __init__(self,name):
        #私有的属性
        self.__name=name
    def getName(self):
        return self.__name
    def setName(self,name):
        self.__name=name
test=Test('11')
print(test.getName())
test.setName('22')

  • 第二种:
class Test(object):
    def __init__(self,name):
        #私有的属性
        self.__name=name
    def getName(self):
        return self.__name
    def setName(self,name):
        self.__name=name
    name=property(getName,setName)
test=Test('11')
test.name='22'
print(test.name)
  • 第三种:get和set方法的名字必须与属性不加下划线的保持一致
class Test(object):
    def __init__(self,name):
        #私有的属性
        self.__name=name
    @property
    def name(self): #get
        return self.__name
    @name.setter
    def name(self,name): #set
        self.__name=name
test=Test('11')
test.name='22'
print(test.name)

最后

以上就是无辜秀发为你收集整理的Python基础-python中的访问权限(私有化)/property使用(get/set方法)(13)的全部内容,希望文章能够帮你解决Python基础-python中的访问权限(私有化)/property使用(get/set方法)(13)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部