导航:首页 > 编程语言 > python中如何把属性变为私有属性

python中如何把属性变为私有属性

发布时间:2022-08-21 04:45:19

1. 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吧,你这变量名字都拼错了

2. python 类为什么不能定义私有属性和方法

因为b.name[0]
=
'zhang'修改的是类属性,类属性是全局的,所有的实例共享,如果想私有化,可以添加
def
__init__(
self
):
self.name
=
list(
self.name
)
就可以了.

3. 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

这样就可以访问私有属性了

4. Python怎么修改私有属性

#看你怎么理解这个私有的含义:
class Person:
def __init__(self, name, gender):
self.name = name
self.gender = gender

class Student(Person):
def __init__(self, name, gender, age, snum):
super(Student, self).__init__(name, gender)
self.__age = age
self.studentnumber = snum
p = Student('Tom', 'Male', 19, 32)
print(p.gender)
print(p.__dict__)
print(p.__age)
'''
执行之后:
Male
{'name': 'Tom', 'gender': 'Male', '_Student__age': 19, 'studentnumber': 32}
Traceback (most recent call last):
File "D:\Program Files (x86)\Python 3.6.1 (64bit)\Python script practices\new_1.py", line 17, in <mole>
print(p.__age)
AttributeError: 'Student' object has no attribute '__age'
这里即说明__age这个属性从外部访问来看,是没有的,从p这个属性字典key中__age属性是以_Student__age的形式体现,可以这么理解为__age是属于Student类的私有属性
当然这个所谓的私有属性,在特殊情况需要修改的时候,也是可以外部访问修改,改变访问语句即可,看个人需要吧

5. Python如何为类元素(属性和方法)提供私有性的方式

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

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

6. python 怎么获取父类的私有属性

在Python中就算继承也不能相互访问私有变量,或者父类访问子类的私有属性也不可以。

7. 访问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则是你动态绑定的属性

8. python 类继承 私有方法和私有属性

这种方式调用是可以的,不能直接调用。

也就是在class B 中不能直接像这样调用

阅读全文

与python中如何把属性变为私有属性相关的资料

热点内容
爱上北斗星男友在哪个app上看 浏览:413
主力散户派发源码 浏览:663
linux如何修复服务器时间 浏览:55
荣县优途网约车app叫什么 浏览:472
百姓网app截图是什么意思 浏览:222
php如何嵌入html 浏览:809
解压专家怎么传输 浏览:743
如何共享服务器的网络连接 浏览:132
程序员简易表白代码 浏览:166
什么是无线加密狗 浏览:62
国家反诈中心app为什么会弹出 浏览:67
cad压缩图打印 浏览:102
网页打开速度与服务器有什么关系 浏览:863
android开发技术文档 浏览:65
32单片机写程序 浏览:50
三星双清无命令 浏览:838
汉寿小程序源码 浏览:344
易助erp云服务器 浏览:532
修改本地账户管理员文件夹 浏览:419
python爬虫工程师招聘 浏览:285