python的私有公有属性

obj.info()

classsub_C(C):

实例讲解Python中的私有属性,实例讲解python私有

在Python中可以通过在属性变量名前加上双下划线定义属性为私有属性,如例子:

复制代码 代码如下:

#! encoding=UTF-8
 
class A:
    def __init__(self):
        
        # 定义私有属性
        self.__name = “wangwu”
        
        # 普通属性定义
        self.age = 19
        
a = A()
 
# 正常输出
print a.age
 
# 提示找不到属性
print a.__name

执行输出:

复制代码 代码如下:

Traceback (most recent call last):
  File “C:UsersleeDocumentsAptana Studio 3
Workspacetestaa.py”, line 19, in <module>
    print a.__name
AttributeError: A instance has no attribute ‘__name’

访问私有属性__name时居然提示找不到属性成员而不是提示权限之类的,于是当你这么写却不报错:

复制代码 代码如下:

#! encoding=UTF-8
 
class A:
    def __init__(self):
        
        # 定义私有属性
        self.__name = “wangwu”
        
        # 普通属性定义
        self.age = 19
        
 
a = A()
 
a.__name = “lisi”
print a.__name

执行结果:
1
lisi
在Python中就算继承也不能相互访问私有变量,如:

复制代码 代码如下:

#! encoding=UTF-8
 
class A:
    def __init__(self):
        
        # 定义私有属性
        self.__name = “wangwu”
        
        # 普通属性定义
        self.age = 19
        
 
class B(A):
    def sayName(self):
        print self.__name
        
 
b = B()
b.sayName()

执行结果:

复制代码 代码如下:

Traceback (most recent call last):
  File “C:UsersleeDocumentsAptana Studio 3
Workspacetestaa.py”, line 19, in <module>
    b.sayName()
  File “C:UsersleeDocumentsAptana Studio 3
Workspacetestaa.py”, line 15, in sayName
    print self.__name
AttributeError: B instance has no attribute ‘_B__name’

或者父类访问子类的私有属性也不可以,如:

复制代码 代码如下:

#! encoding=UTF-8
 
class A:
    def say(self):
        print self.name
        print self.__age
        
 
class B(A):
    def __init__(self):
        self.name = “wangwu”
        self.__age = 20
 
b = B()
b.say()

执行结果:

复制代码 代码如下:

wangwu
Traceback (most recent call last):
  File “C:UsersleeDocumentsAptana Studio 3
Workspacetestaa.py”, line 15, in <module>
    b.say()
  File “C:UsersleeDocumentsAptana Studio 3
Workspacetestaa.py”, line 6, in say
    print self.__age
AttributeError: B instance has no attribute ‘_A__age’

代码如下复制代码

obj=C()

Python怎为类元素(属性与方法)提供私有性的方式 ?

Python不支持私有成员。所有Python类中的成员都是公共的,可以从类外部调用或存取的。

所谓成员名前加一条或两条下划线“_func”或“__member”的方式只是一种约定俗成,提示用户这个成员函数或变量只用于内部调用,不是设计给用户使用的。即使如此,用户只要想调用便可调用,无任何约束。
 

今天为大家分享一篇老生常谈python的私有公有属性,很有参考价值哦,一起来看一看吧。

obj.info()

python 类实例化

1、python的类中,以__(两个下划线)开头但不以__结束的就是私有的变量或者函数,私有函数和变量不能在class外调用到。
class test:
def __init__(self, num):
self.__num = num
privateTest = test(100)
privateTest.__num#会报错
当然也有办法调到,只是不建议那样做。
2、第一个class se()中的 变量s,是一个类变量,是class
se的变量,类变量可以被类本身访问,如se.s,也可以被各个对象访问,而且由于是存在class里的所以值唯一,有点像C++里的static。
但是如果有某一个对象也创建了一个叫s的变量
覆盖了类变量,那么那个self.s就是对象的属性,而不会调到类变量。
你可以运行试试
# -*- coding: cp936 -*-
class A:
name = []
def __init__(self, name):
self.name.append(name)

def nameMyself(self, name):
self.name = [name]
print ‘my name is’,self.name, ‘and class A1name is :’, A.name

def test(self):
print “my name is”, self.name
obj = A(“num0”)
obj1 = A(“num1”)
print “obj1`name”, obj1.name#对象访问类变量name
print “class A`name”, A.name#class自己访问类变量name
obj1.test()#此时还是访问的类变量name
obj1.nameMyself(‘aid’)#给自己起个名覆盖类变量的name
obj1.test()#对于obj1来说只能访问自己的name了
print “class A`name”, A.name#类变量依然存在
 

在Python中可以通过在属性变量名前加上双下划线定义属性为私有属性,如例子:
复制代码…

deffunc(self):

 代码如下

obj=C()

obj.func()

print(C.__name)#派生类中不可以访问父类的私有字段

 

obj=sub_C()

classC:

方法、属性的访问于上述方式相似,即:私有成员只能在类内部使用

  __name=”私有属性”

obj.func()

    print(C.__name)

print(C.__name)

    print(C.__name)#派生类中不可以访问父类的私有字段

__name=私有属性

 

classsub_C(C):

python中,类内方法外的变量叫属性,类内方法内的变量叫字段。他们的私有公有访问方法类似。

definfo(self):

obj=sub_C()

python中,类内方法外的变量叫属性,类内方法内的变量叫字段。他们的私有公有访问方法类似。

  deffunc(self):

classC:

 

方法、属性的访问于上述方式相似,即:私有成员只能在类内部使用

  definfo(self):

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注