做网站工作室名字安徽二建标准
news/
2025/10/1 15:45:36/
文章来源:
做网站工作室名字,安徽二建标准,怀集县住房和城乡规划建设网站,网站软文发多了会影响参考链接#xff1a; Python中的私有变量
我们这里就直奔主题#xff0c;不做基础铺垫#xff0c;默认你有一些Python类的基础#xff0c;大家在看这篇博客的时候#xff0c;如果基础知识忘了#xff0c;可以去菜鸟教程
从一个简单的类开始
class A(): #定义一…参考链接 Python中的私有变量
我们这里就直奔主题不做基础铺垫默认你有一些Python类的基础大家在看这篇博客的时候如果基础知识忘了可以去菜鸟教程
从一个简单的类开始
class A(): #定义一个类 A a 100 #公有变量 _b 200 #公有变量 __c 300 #私有变量 __d__ 400 #公有变量
a A() #实例化一个对象a当然可以取另外一个名字b
print(a.a,a._b,a.__c,a.__d__) #打印四个变量的值 运行结果 Traceback (most recent call last): File “c:\users\12090\desktop\a.py”, line 7, in print(a.a,a._b,a.__c,a.d) AttributeError: ‘A’ object has no attribute ‘__c’ 运行结果提示__c不能访问这里的错误信息并没有指出__c是私有变量在类外不能访问 我们程序这样改动
通过成员函数间接访问私有变量 aA,和aA()的区别
我们把第8行改造一下 去掉括号就像这样
a A会成功生成对象a而且通过对象a可以正确访问到公有变量a_bd。但是在调用函数print_c(的时候出问题错误提示 TypeError: print_c() missing 1 required positional argument: ‘self’ 提示缺少参数怎么解决这个问题呢 显示传递一个类或者对象进去 那么aA,和aA()有什么区别呢 区别是 如果是aA,则不会调用类中的构造函数 如果是aA()则会调用构造函数
A()会调用构造函数
我们来做一个实验 python中的构造函数名是系统规定的init添加后如下
class A(): #定义一个类 A a 100 #公有变量 _b 200 #公有变量 __c 300 #私有变量 __d__ 400 #公有变量 def __init__(self): #构造函数定义 print(calling __init__....) def print_c(self): #通过成员函数访问私有变量 return self.__c
a A #不会调用构造函数
print(a.a,a._b,a.print_c(a),a.__d__)
b A() #会调用构造函数
print(b.a,b._b,b.print_c(),b.__d__) 运行结果 当我们通过A()这种形式构造对象的时候会显示调用构造函数__init__。 当我们通过A这种形式构造对象的时候不会调用构造函数。
构造函数构造了什么
“构造”这个词是一个动词就是要造一个东西那么造什么呢其实我们上面的例子可能让初学者有点不明所以所以接下来我们让构造函数做点有意义的事情程序如下
class A(): #定义一个类 A a 100 #公有变量 _b 200 #公有变量 __c 300 #私有变量 __d__ 400 #公有变量 def __init__(self,a,b,c,d): #通过构造函数给公有变量或者私有变量重新赋值 print(构造前:,self.a,self._b,self.__c,self.__d__) self.a a self._b b self.__c c self.__d__ d print(构造后:,self.a,self._b,self.__c,self.__d__) def print_c(self): #通过成员函数访问私有变量 return self.__c
a A(1000,2000,3000,4000) #通过传值构造对象 运行结果 这个例子就证明了构造函数的作用
python中 self的作用
self这个单词是自己自我的意思它代表对象本身其实你可以换一个单词也可以比如you
照样可以运行 甚至一个地方用self一个地方用you也可以
self的实际意义
我们一般使用selfpython系统也默认是self但是self的作用远不止单词意思这么简单 比如我们去掉self
运行起来好像也没问题但是这里的a,_b,__c,d构造函数里面并不是公有变量中的a,_b,__c,d。怎么见得呢 我们把第七行打开 运行结果出错 Traceback (most recent call last): File “c:\users\12090\desktop\a.py”, line 13, in a A(1000,2000,3000,4000) #调用构造函数 File “c:\users\12090\desktop\a.py”, line 7, in init print(‘构造前:’,a,_b,__c,d) UnboundLocalError: local variable ‘_b’ referenced before assignment
错误原因是本地变量_b没有引用这个local是本地的意思也就是在构造函数__init__函数作用范围内。那么第7行的a为什么没有报错呢因为a用的是参数里面的a并不是公有变量中a。 所以第12行的打印结果其实打印的是局部变量也就是说在构造函数里面我们定义了一套与公有变量同名的变量在这种情况下局部变量优先。 所以self其实非常有作用必须通过self来显示指定公有变量不然会当作局部变量。 我们还可以进一步说明这个问题
进一步证明 结论
Python类中公有变量和私有变量定义一般定义在类名下面构造函数上面比如这样 class A: 公有变量 私有变量 def init(): 。。。 其中私有变量需要有前缀下划线__ 如果成员函数(包括构造函数)中出现了与公有变量(私有变量)同名的变量则python系统会屏蔽公有变量和私有变量把改变量当成局部变量。如果要在成员函数(包括构造函数)使用公有变量和私有变量必须通过self显示指定就像这样 class A: a 100 _b 200 __c 300 def init(self,a,b,c): self.a a #使用公有变量a _b b #屏蔽了公有变量_b重新定义了一个局部变量_b self.__c c #使用私有变量__c
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923984.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!