A. 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#类变量依然存在
B. python 私有属性与方法
一般来说,想访问类成员变量,要么用类访问,要么用实例访问。实例访问的是实例的副本,类访问的是类的副本。
class A:
XXX = 0
def yy(self):
pass
A.XXX
或者,
a = A()
a.XXX
如果想从对象访问类的副本,可以先拿到这个实例的类,再去访问它的类成本
a.__class__.XXX
但你这个有点不一样,你这个是类的私有成员变量,外面是无法访问的(按照设计思路)。
一般稳健的方式是类的内部设置一个get()方法,调用get方法返回。
当然,如果你强行向访问,可以这样
a._A__XXX
但这种方法,访问的仍然是对象自己的副本,不是类的
如果你想强行访问,又想访问的是类自己的副本,可以这样
a.__class__._A__XXX
另外,找个好点的IDE吧,你这变量名字都拼错了
C. Python如何为类元素(属性和方法)提供私有性的方式
Python不支持私有成员。所有Python类中的成员都是公共的,可以从类外部调用或存取的。
所谓成员名前加一条或两条下划线“_func”或“__member”的方式只是一种约定俗成,提示用户这个成员函数或变量只用于内部调用,不是设计给用户使用的。即使如此,用户只要想调用便可调用,无任何约束。
D. Python类中的私有属性前使用什么来标识
Python 中并没有有效限制访问任何实例变量或方法的机制。
Python规定了使用单/双下划线为变量/方法的名称前缀,以模拟受保护和专用访问说明符的行为。
默认情况下,Python类中所有成员都是公共的,可以从类环境之外访问任何成员。
E. python 类的定义
Python编程中类定义,代码如下:
class<类名>:
<语句>
定义类的专有方法:
__init__构造函数,在生成对象时调用
__del__析构函数,释放对象时使用
__repr__打印,转换
__setitem__按照索引赋值
__getitem__按照索引获取值
__len__获得长度
__cmp__比较运算
__call__函数调用
__add__加运算
__sub__减运算
__mul__乘运算
__div__除运算
__mod__求余运算
__pow__称方
代码如下:
#类定义
classpeople:
#定义基本属性
name=''
age=0
#定义私有属性,私有属性在类外部无法直接进行访问
__weight=0
#定义构造方法
def__init__(self,n,a,w):
self.name=n
self.age=a
self.__weight=w
defspeak(self):
print("%sisspeaking:Iam%dyearsold"%(self.name,self.age))
p=people('tom',10,30)
p.speak()
F. python 类继承 私有方法和私有属性
这种方式调用是可以的,不能直接调用。
也就是在class B 中不能直接像这样调用
G. 访问python私有属性问题,如下面描述
因为Python支持动态属性绑定,当你执行a.__name = "lisi"相当于临时添加了一个__name属性,你不光可以执行a.__name = "lisi",还可以执行a.gender = '1', a.level = 1等等,这些都是一样的,只不过恰好,你添加的属性跟私有属性重名了。
classA:
def__init__(self):
self.__name='a'
self.age=10
a=A()
try:
print(a.__name)#没有输出
print(a._A__name)#输出a
except:
pass
a.__name='b'
print(a.__name)
print(a.__dir__())
#输出
a
b
['__gt__','__new__','__weakref__','__init__','__setattr__','__repr__','__class__','__eq__','__dir__','__delattr__','__ge__','__dict__','__str__','__subclasshook__','age','__le__','__getattribute__','__mole__','__rece__','__format__','__ne__','__hash__','__doc__','_A__name','__sizeof__','__lt__','__name','__rece_ex__']
你会发现输出a的所有属性的时候,会有两个__name,_A__name就是你定义的私有属性,python内部会将它的属性名给改成这样,所以你第一次调用的时候会报错,但是你其实是可以用a._A__name的方式获得。而另外一个__name则是你动态绑定的属性
H. python 类中的私有属性有哪些
类的私有属性:
__private_attrs:两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问。
在类内部的方法中使用时 self.__private_attrs。
类的方法:
在类地内部,使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数
类的私有方法 :
__private_method:两个下划线开头,声明该方法为私有方法,不能在类地外部调用。
在类的内部调用 self.__private_methods
实例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class JustCounter:
__secretCount = 0 # 私有变量
publicCount = 0 # 公开变量
def count(self):
self.__secretCount += 1
self.publicCount += 1
print self.__secretCount
counter = JustCounter()
counter.count()
counter.count()
print counter.publicCount
print counter.__secretCount # 报错,实例不能访问私有变量
Python不允许实例化的类访问私有数据,但你可以使用 object._className__attrName 访问属性,将如下代码替换以上代码的最后一行代码:
…………………….
print counter._JustCounter__secretCount
这样就可以访问私有属性了
I. Python菜鸟求助 类中定义私有属性有什么用啊,为啥到处都能访问,求解释
例子很清楚,你是通过对象的方法来访问这个属性,而不是student1.__name 这种方式。
它的应用也就是,某些属性需要一定的条件才可以访问。
比如一个很常见的权限控制,一个个人信息类,有一个电话号码属性,希望实现经理权限登陆系统,才可以查询,就可以用私有属性来做。