类内方法外的变量叫属性,今天为大家分享一篇老生常谈python的私有公有属性
分类:博客热点

明日为大家享用一篇不应时宜python的民用公有属性,很有参谋价值哦,一齐来看一看吧。

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

实例讲授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'

python中,类内方法外的变量叫属性,类内方法内的变量叫字段。他们的私家公有访谈方法雷同。

 

Python怎为类成分(属性与措施State of Qatar提供私有性的艺术 ?

Python不扶持个体成员。所有Python类中的成员都是公家的,能够从类外界调用或存取的。

所谓成员名前加一条或两条下划线“_func”或“__member”的不二秘籍只是一种相沿成习,提示顾客那些成员函数或变量只用于内部调用,不是统筹给客户接纳的。固然如此,客户只要想调用便可调用,无其余自律。  

代码如下复制代码

 代码如下

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中能够透过在性质变量名前增加双下划线定义属性为私有总体性,如例子: 复制代码...

classC:

classC:

__name=私有质量

  __name="私有属性"

deffunc(self):

 

print(C.__name)

  deffunc(self):

classsub_C(C):

    print(C.__name)

definfo(self):

 

print(C.__name)#派生类中无法访问父类的民用字段

classsub_C(C):

obj=C()

  definfo(self):

obj.func()

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

obj=sub_C()

obj=C()

obj.info()

obj.func()

艺术、属性的拜望于上述办法日常,即:私有成员只可以在类内部使用

obj=sub_C()

obj.info()

 

措施、属性的走访于上述办法相仿,即:私有成员只好在类内部接纳

本文由威尼斯在线注册平台发布于博客热点,转载请注明出处:类内方法外的变量叫属性,今天为大家分享一篇老生常谈python的私有公有属性

上一篇:互连网有看不尽的php随机数与验证码的代码与篇章,5为大写字母和数字 下一篇:没有了
猜你喜欢
热门排行
精彩图文