公有还是私有?一文搞懂奇怪的python变量

liftword1个月前 (03-19)技术文章6

很多童靴刚开始接触python变量的时候应该会非常困惑,因为python中的变量实在是太灵活了,而且变量的写法也是很独特,相同的字符,前面或者后面加单下划线或者双下划线都可以组成不同的变量名称。

极度灵活的python变量

python中的变量一般是字母、数字、下划线组成, 但是 变量不能以数字开头,而且变量区分大小写!!!

python中的常量一般是大写字母表示。

在Python中,有以下几种方式来定义属性变量:

  • `xx`:公有变量
  • `_xx`:单前置下划线,被保护的属性或方法,
  • `__xx`:双前置下划线,私有化属性或方法,无法在外部直接访问(名字重整所以访问不到,只能是允许这个类内部本身进行访问了。连子类也不可以)。
  • `__xx__`:双前后下划线,系统定义名字(这就是在python中强大的魔法方法),因为变量名__xx__对Python 来说有特殊含义,对于普通的变量应当避免这种命名风格。
  • `xx_`:单后置下划线,用于避免与Python关键词的冲突,可以直接调用。
class Car:
    __name='geely'    #私有属性,不可以直接调用
    _age = 18         #受保护的属性,可以直接调用,但是不建议直接调用
    def _get_name(self):    #受保护的方法,外部还可以调用
        return self.__name
    def __get_age(self):    #私有方法,外部不可以调用
        return self.__age
    
    def test(self):
        return self._get_name()
    def testb(self):
        return self.__get_age()

c= Car()
c._age
18
c.__name    #前置双下划线不能直接访问,会报错
AttributeError: 'Car' object has no attribute '__name'

一般来讲,变量名_xx被看作是“私有 的”,在模块或类外不可以使用,当变量是私有的时候,用_xx 来表示变量是很好的习惯。类对象和子类可以访问,这并不能完全做到真正的私有,只是约定俗成的而已,这样写表示不希望这个变量在外部被直接调用。

__xx ,双下划线的私有属性,无法在外部直接访问,但是其实也不是真正的私有属性,只是python对属性名字进行重整,所以访问不到,我们可以通过__dict__属性查看重整后的属性名称

__dict__属性

在类里面,其实并没有方法这个东西,所有的东西都保存在属性里面,所谓的调用方法其实是类里面的一个同名属性指向了一个函数(方法),返回的是函数的引用,再用 函数() 这种方式就可以调用它

我们可以通过__dict__属性来查看,__dict__是存放对象的属性,字典类型,查找对象的属性,其实是在对象的__dict__字典中查找。

class Te:
	  __age=19
    def hello(self):
        print('hello')

通过__dict__看一下类的属性 Te.__dict__

mappingproxy({'__module__': '__main__',
              '_Te__age': 19,
              'hello': ,
              '__dict__': ,
              '__weakref__': ,
              '__doc__': None})

很明显,__age被重整为 _Te__age,就是类名加原属性名称,可以通过这个属性名称访问,如果你非要通过外部访问,也是可以的,可以使用t._Te__age对__age进行访问。

Te._Te__age
>> 19

注:虽然私有变量可以通过_类名__变量名来访问,但强烈建议不要这样做

相关文章

[oeasy]python073_下划线在python里是什么含义_内部变量私有变量

导入import回忆上次内容上次直接从模块中导入变量、函数from my_file import pi导入my_file.pi并作为 pi 使用from my_file import pi as my...

// 在 Python 中是什么意思?Python 中的运算符

在 Python 中,使用双斜杠运算符执行下层除法。此运算符将第一个数字除以第二个数字,并将结果向下舍入为最接近的整数(或整数)。////在本文中,我将向您展示如何使用运算符并将其与常规除法进行比较,...

python入门050:认识异常

一、认识异常1、什么是异常程序在运行过程中,不可避免地会出现一些错误,比如:使用了没有定义的变量;用0作除数等等。在程序中,我们称这些错误为异常,每当发生错误时,python都会创建一个异常对象。2、...

python中的int是什么意思

Python是一种计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。python...

python里sep是什么意思

print()中有两个默认参数sep和end。其中sep函数是设置分隔符,默认为sep=’ ’(空格)例子:相关推荐:《Python视频教程》coffee_cup = ‘coffee’ print(“...

python学习之sub函数的理解和使用

在python学习过程中,常常会遇到字符处理的函数sub(),下面就对这个函数进行学习。一、函数理解sub()函数是在re模块中,用于替换字符串中的匹配项。下面先从字面理解下re和sub的意思。(1)...