-
2020-11-30 01:33:33
Python默认的成员函数和成员变量都是公开的,Python 私有属性和方法没有类似别的语言的public,private等关键词来修饰。 在python中定义私有变量只需要在变量名或函数名前加上 "__"两个下划线,那么这个函数或变量就会为私有的了
声明该方法为私有方法,不能在类的外部调用
代码class Test(object):
#普通方法
def test(self):
print("普通方法test")
#普通方法
def _test1(self):
print("普通方法_test1方法")
#私有方法
def __test2(self):
print("私有方法__test2方法")
t = Test()
t.test()
t._test1()
#t.__test2()#调用的时候会报错
Python中没有像C++中public和private这些关键字来区别公有属性和私有属性,它是以属性命名方式来区分,如果在属性名前面加了2个下划线'__',则表明该属性是私有属性,否则为公有属性(方法也是一样,方法名前面加了2个下划线的话表示该方法是私有的,否则为公有的)。
更多相关内容 -
Python 私有属性和私有方法应用场景分析
2020-12-17 09:12:10Python是个开放的语言,默认情况下所有的属性和方法都是公开的 或者叫公有方法,不像C++和 Java中有明确的public,private 关键字来区分私有公有。 Python默认的成员函数和成员变量都是公开的,类的私有属性指只有在... -
Python私有属性私有方法应用实例解析
2020-09-16 07:46:51主要介绍了Python私有属性私有方法应用场景解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 -
python私有方法和私有属性
2018-05-21 08:51:51Python默认的成员函数和成员变量都是公开的,Python 私有属性和方法没有类似别的语言的public,private等关键词来...声明该方法为私有方法,不能在类的外部调用 代码 class Test(object): #普通方法 def test(...Python默认的成员函数和成员变量都是公开的,Python 私有属性和方法没有类似别的语言的public,private等关键词来修饰。 在python中定义私有变量只需要在变量名或函数名前加上 "__"两个下划线,那么这个函数或变量就会为私有的了
声明该方法为私有方法,不能在类的外部调用
代码
class Test(object): #普通方法 def test(self): print("普通方法test") #普通方法 def _test1(self): print("普通方法_test1方法") #私有方法 def __test2(self): print("私有方法__test2方法") t = Test() t.test() t._test1() #t.__test2()#调用的时候会报错
执行效果
外界无法访问私有方法,但可以在类内部方法私有方法。
class Test(object): #私有方法 def __test2(self): print("私有方法__test2方法") #普通方法 def test(self): print("普通方法test") #普通方法 def _test1(self): print("普通方法_test1方法") #可以在类内部调用私有方法 t.__test2()# self.__test2() t = Test() t.test() t._test1() #t.__test2()和t.test2()#调用的时候会报错
私有方法应用场景
执行效果
私有属性
如果有一个对象,当需要对其进行修改属性时,有2种方法
对象名.属性名 = 数据 ---->直接修改
对象名.方法名() ---->间接修改
为了更好的保存属性安全,即不能随意修改,一般的处理方式为
将属性定义为私有属性
添加一个可以调用的方法,供调用
案例
class Person(object): def __init__(self, name): self.__name = name def get_name(self): return self.__name def set_name(self, new_name): if len(new_name) >= 5: self.__name = new_name else: print("error:名字长度需要大于或者等于5") xiaoming = Person("skyter") print(xiaoming.get_name()) #print(xiaoming.__name)#会报错
class Person(object): def __init__(self, name): self.__name = name def get_name(self): return self.__name def set_name(self, new_name): if len(new_name) >= 5: self.__name = new_name else: print("error:名字长度需要大于或者等于5") p = Person("skyter") p.set_name("wanger") print(p.get_name()) p.set_name("lisi") print(p.get_name())
执行如图:
总结
Python中没有像C++中public和private这些关键字来区别公有属性和私有属性
它是以属性命名方式来区分,如果在属性名前面加了2个下划线'__',则表明该属性是私有属性,否则为公有属性(方法也是一样,方法名前面加了2个下划线的话表示该方法是私有的,否则为公有的)。
-
Python私有属性与私有方法
2022-03-21 10:38:271、 场景定义 私有属性 是指在 Python 的面向对象开发过程中,对象的某些属性只想在对象的内部被使用,但不想在外部被访问...在 Python 中定义私有属性和私有方法的语法如下: class Staff: def __init__(self, s_nam.1、 场景定义
私有属性
是指在 Python 的面向对象开发过程中,对象的某些属性只想在对象的内部被使用,但不想在外部被访问到这些属性。
即:私有属性是对象不愿意公开的属性。
私有方法
是指在 Python 的面向对象开发过程中,对象的某些方法或者称为函数只想在对象的内部被使用,但不想在外部被访问到这些方法或函数。
即:私有方法是对象不愿意公开的方法或函数。
2、 语法定义
在 Python 中定义私有属性和私有方法的语法如下:
class Staff:
def __init__(self, s_name, s_salary):
self.s_name = s_name
self.__salary = s_salarydef \_\_secret(self): print("%s 的工资是 %d" % (self.s\_name, self.\_\_salary))
(1). __salary是以两个下划线开头来定义的私有属性。
(2). __secret(self)是以两个下划线开头来定义的私有方法。
3、 调用分析
(1). 在__init__的对象初始化方法中,以两个下划线开头定义的__salary属性就是私有属性。
现在在对象的外部来调用一下__salary属性,看是否能正常访问该私有属性。
从上图运行结果可以看出,第11行,即在对象外部访问对象的私有属性 __salary 时,提示 AttributeError 错误,Staff 对象 zhangsan 没有属性 __salary。
为了证明 Staff 类对象确实是有__salary 这个实例属性的,只是因为在对象外部不能访问私有属性。
我把 self.__salary 修改为:self.salary,__secret(self)方法对self.__salary属性的引用,做相应的修改,看如下图所示的运行结果。
可以从运行结果看出,这种非私有属性在外部的调用是正常的,没有提示 AttributeError 错误。
(2). 在 __secret(self) 实例方法中,以两个下划线开头定义的__secret(self)方法就是私有方法。
和上面测试流程一样,先在对象的外部来调用私有方法__secret(self),看是否能正常调用该私有方法。
从上图运行结果可以看出,第11行,即在对象外部访问对象的私有方法 __secret(self) 时,提示 AttributeError 错误,Staff 对象 zhangsan 没有 __secret 方法。
为了证明 Staff 类对象是有__secret(self)这个实例方法的,只是因为在对象外部不能访问私有方法。
我把 __secret(self) 方法修改为:secret(self),其他代码不变,看如下图所示的运行结果。
可以从运行结果看出,这种非私有方法在外部的调用是正常的,没有提示 AttributeError 错误。
(3). 从下图可以看出,在对象内部私有方法与私有属性是可以被调用的。
如图中的 work 方法调用了私有方法__secret(self),而私有方法__secret(self)调用了私有属性__salary。
在对象外部使用 Staff 类对象 zhangsan 来调用 work 方法,可以间接访问到对象的私有属性和私有方法。
从控制台输出结果来看 work 方法能正常访问到对象内部定义的私有属性和私有方法。
4、 Python伪私有属性和私有方法
在 Python 中,并没有真正意义上的私有,因为 Python 内部在给属性、方法命名时,对名称做了一些特殊处理,使得外界无法访问到对应的属性和方法。
以私有属性和私有方法为例,Python内部处理方式为:
(1). 属性: __salary,经过处理后的属性名为:_Staff__salary(_类名__属性名)
(2). 方法: __secret,经过处理后的方法名为:_Staff__secret(_类名__方法名)
知道了 Python 内部对于私有属性和私有方法的处理,现在使用这种处理后的命名方式来在对象外部访问私有属性和私有方法,看是否能访问正常。
class Staff:
def __init__(self, s_name, s_salary):
self.s_name = s_name
self.__salary = s_salarydef \_\_secret(self): return "%s的工资是 %d" % (self.s\_name, self.\_\_salary)
zhangsan = Staff(“张三”, 10000)
print(zhangsan._Staff__salary)
print(zhangsan._Staff__secret())运行结果如下图所示
控制台没有抛任何的异常,之前的提示 AttributeError 错误也没有了。
这个例子证明了 Python 是没有真正意义上的私有的,当知道了其内部处理方式后,依然可以使用_类名__属性名(方法名)的方法来在对象外部访问到对象内部定义的私有属性和私有方法。
但这种方式在日常工作中是不推荐使用的,既然在对象内部定义属性和方法时,就声明了其为私有的,调用方就需要遵守其规则。
这里只是想通过这个小例子来说明 Python 并无真正意义上的私有。
-
python中私有函数调用方法解密
2021-01-20 04:56:49本文实例讲述了python中私有函数调用方法。分享给大家供大家参考,具体如下: 与大多数语言一样,Python 也有私有的概念: ① 私有函数不可以从它们的模块外面被调用 ② 私有类方法不能够从它们的类外面被调用 ③ ... -
python如何访问私有方法
2021-02-04 08:10:08python访问私有方法的方法 :通过“实例类.类名_变量名”可对私有方法进行访问。在python中,不像c#/java类语言,支持类的私有方法,这点有点像objc,虽然objc可以通过扩展extension来实现,但源于objc的运行时特性...python访问私有方法的方法 :通过“实例类.类名_变量名”可对私有方法进行访问。
在python中,不像c#/java类语言,支持类的私有方法,这点有点像objc,虽然objc可以通过扩展extension来实现,但源于objc的运行时特性,我们还是可以通过非常手段来进行访问的。不过这点说白了,好像c#中也可以通过指定BindingFlags.NonPublic的方式结合反射来调用。
假设有如下一个python类:class Securityp(object):
def __inaccessible(self):3
print "Bet you can't see me..."
而s是Securityp的一个实例,我们直接使用 s.__inaccessible()是会报错的,通过在一个方法前面加上两个下划线的方法来让一个方法成为私有方法。
那我们应该怎么来访问这个所谓的私有方法呢,s._Securityp__inaccessible()
上述代码就可以让我来访问了。这是因为,在python的解析器中,所有以双下划线开头的方法都会被翻译成前面加上单下划线和类名的形式。
这样我们就可以访问类中私有方法了。
-
python的私有属性与私有方法
2022-03-22 12:32:53私有方法:私有方法就是对象不希望公开的方法 #定义方法 在定义属性或方法时,在属性名或方法名前增加两个下划线,就是定义的私有属性与私有方法 """ class dog01 : def __init__(self,name): self.name=name ... -
Python 私有化
2020-12-22 13:07:41python中的私有变量和私有方法仍然是可以访问的;访问方法如下:私有变量:实例._类名__变量名私有方法:实例._类名__方法名()Python并没有真正的私有化支持,但可用下划线得到伪私有。 尽量避免定义以下划线开头的变量!... -
python如何调用私有属性与私有方法?
2022-03-04 14:07:59很多同学在学习到类与实例的时候,都了解过私有属性与私有方法的概念.但是却不知道如何调用它们?今天就告诉大家如何调用私有属性与私有方法. 我们先定义一个类,里面有私有属性与私有方法 class Class1: __str1 = '... -
python的私有属性和方法
2021-10-07 17:05:211、私有权限:在属性名和方法名 前面 加上两个下划线 __ 类的私有属性 和 私有方法,都不能通过对象直接访问,但是可以在本类内部访问; 类的私有属性 和 私有方法,都不会被子类继承,子类也无法访问; 私有属性 ... -
python可以调用私有方法吗
2021-01-13 20:08:12私有方法和私有属性私有方法只能在类内部被调用,不能被对象使用私有属性只能在类内部使用,不能被对象使用私有属性只能在类内部使用,对象不能使用,但是,我们可以通过在类内部定义公有方法对私有属性进行调用或... -
python私有属性和方法实例分析
2021-01-20 04:13:26本文实例分析了python的私有属性和方法。分享给大家供大家参考。具体实现方法如下: python默认的成员函数和成员变量都是公开的,并且没有类似别的语言的public,private等关键词来修饰。 在python中定义私有变量只... -
Python私有方法与继承
2018-04-08 14:02:38输出 -
python——私有、继承和多态
2022-02-10 10:24:51python——私有、继承和多态 -
python私有属性供外界访问的三种方法(面向对象 封装)
2022-01-21 20:01:111.在一个类中,写了__str__(self)方法和不写的区别 class User(object): def __init__(self,name,age,gender): self.name = name self.age = age self.gender = gender def __str__(self): return "name = ... -
Python类的私有属性、私有方法、类方法
2021-10-29 09:34:52类的私有属性 __private_attrs:两个下划线开头,声明该属性为私有 1.类的私有属性不能被类的实例直接访问,示例代码如下: class A: __secretCount = 0 # 私有变量 def count(self): self.__secretCount +=... -
python学习 私有方法,私有方法在继承中的表现
2018-10-10 09:50:09私有方法:顾名思义,只有自己才能使用的方法,在python中,定义私有方法一般用双下划线表示:‘__’ class Sent: #私有方法(双下划线定义的,比较重要,可以通过新建一个方法调用) def __sent_msg(self): ... -
Python面向对象程序设计之私有变量,私有方法原理与用法分析
2020-12-20 12:21:54本文实例讲述了Python面向对象程序设计之私有变量,私有方法原理与用法。分享给大家供大家参考,具体如下: 私有变量,私有方法: python的私有化是为了规划私有属性,避免非相关的访问【假如!我有老婆,你不能... -
Python私有变量与私有方法
2021-12-01 13:01:34# 在变量前加上__将变量变成私有变量,类外无法使用 __interest_rate = 0.855 def __init__(self, amount, owner): self.__amount = amount self.owner = owner def desc(self): # 类内调用私有变量 print... -
Python私有属性、私有方法,子类不能继承父类的私有属性和私有方法,修改私有属性的值 ,类属性,静态方法...
2021-10-07 16:24:03私有方法 1.1、我们无法从外部来调用__da这个方法,因为我们把他私有化了 我们可以通过下面这种方法,来进行访问私有化方法 继承: 1、属性 1.1 可以看到我们可以访问到父类中公共的方法,有也可以获取到... -
Python 类的私有属性和私有方法实例分析
2020-09-18 14:54:24主要介绍了Python 类的私有属性和私有方法,结合实例形式分析了Python面向对象程序设计中类的私有属性与私有方法简单操作技巧,需要的朋友可以参考下 -
Python面向对象程序设计之私有属性及私有方法示例
2021-01-01 10:01:24本文实例讲述了Python面向对象程序设计之私有属性及私有方法。分享给大家供大家参考,具体如下: 如果有一个对象,当需要对其进行修改属性时,有2种方法: (1)对象名.属性名=数据—->直接修改 (2)对象名.方法名... -
python之私有属性及私有方法
2017-11-08 14:15:31如果有一个对象,当需要对其进行修改属性时,有2种方法: ...(1)将属性定义为私有属性 (2)添加一个可以调用的方法,供调用,也就是间接调用属性 下面这个是一个错误的例子: class People(object): def __in