Python私有属性

1 访问类的私有属性
首先我们定义一个包含私有属性的类,尝试使用实例对象访问它

[Python] 纯文本查看 复制代码

?


1

2

3

4

5

6

7

8

class People(object):

    def __init__(self):

        self.__age = 20

people = People()

print(people.__age)

结果如下:

[Python] 纯文本查看 复制代码

?


1

2

3

4

Traceback (most recent call last):

  File "C:/Users/flydack/Desktop/day02/private.py", line 8, in <module>

    print(people.__age)

AttributeError: ‘People‘ object has no attribute ‘__age‘

2 为什么不能直接访问呢
无法访问私有属性的原因是:python对私有属性的名字进行了修改(重写) , 这样做的好处是:防止子类修改基类的属性或者方法. 现在,我们遍历dir( people)查看people的内置方法和属性:

[Python] 纯文本查看 复制代码

?


1

2

for i in dir(people):

    print(i)

结果如下:

[Python] 纯文本查看 复制代码

?


01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

_People__age

__class__

__delattr__

__dict__

__dir__

__doc__

__eq__

__format__

__ge__

__getattribute__

__gt__

__hash__

__init__

__init_subclass__

__le__

__lt__

__module__

__ne__

__new__

__reduce__

__reduce_ex__

__repr__

__setattr__

__sizeof__

__str__

__subclasshook__

__weakref__

可以看到,python内部将私有__age修改成了‘ _People__age ‘ (_类名__属性名) ,这就是我们无法直接访问私有属性或者方法的原因,那既然我们知道了这个原因,根据修改名便可以访问它了:

[Python] 纯文本查看 复制代码

?


1

print(people._People__age)

结果为:
20

3 关于私有属性的忠告
知道该原理便可,请不要尝试去直接访问它 , 既然人家这么设置肯定有它这么设置的理由,切不可‘  鲁莽从事啊 ‘.

更多技术资讯可关注:gzitcast

原文地址:https://www.cnblogs.com/heimaguangzhou/p/11578503.html

时间: 2024-10-12 05:08:40

Python私有属性的相关文章

Python私有属性set 和get方法

class Person(object): #self不是关键字,换成其他的标识符也是可以的,但是一般不要改 def run(self): print("run") def eat(self,food): print("eat" + food) def say(self): print("hello! my name is %s,i am %d years old" %(self.name,self.age)) def __init__(self

Python - 私有属性(双下线的变形)

__x会自动变形为_类名__x 正常情况 class A: def foo(self): print('from A') def test(self): self.foo() class B(A): def foo(self): print('from B') b = B() b.test() # from B 把foo定义成私有 class A: def __foo(self): #双下线私有属性在定义时就变形为_A__fa print('from A') def test(self): se

Python私有属性和私有方法

私有属性和私有方法 01. 应用场景及定义方式 应用场景 在实际开发中,对象 的 某些属性或方法 可能只希望 在对象的内部被使用,而 不希望在外部被访问到 私有属性 就是 对象 不希望公开的 属性 私有方法 就是 对象 不希望公开的 方法 定义方式 在 定义属性或方法时,在 属性名或者方法名前 增加 两个下划线,定义的就是 私有 属性或方法 class Women: def __init__(self, name): self.name = name # 不要问女生的年龄 self.__age

Python私有属性set和get方法2

class Person(object): count = 0 #类属性 def __init__(self,name,age):#实例属性 # self.__name = name#name是私有属性:私有属性接收是set/get方法; # self.__name 也可以用 self.setName(name) 这样的好处是在创建实例的时候,不用再重新去给赋值(调用set方法),初始化就可以赋值 self.setName(name) self.age = age def run(self):

Python私有属性@property方法

# 把得到的属性值的方法上@property# 在设置属性值的方法上@属性名.setter# 两个方法的名字一致,都是属性名#先写@property再写@属性名.setterclass Person(object): def __init__(self,name,age):#在定义对象属性的时候,私有属性不加__ self.name = name self.age = age @property#相当于getName()方法 def name(self): return self.__name#

3.5私有属性和私有方法

私有属性和私有方法 01. 应用场景及定义方式 应用场景 在实际开发中,对象 的 某些属性或方法 可能只希望 在对象的内部被使用,而 不希望在外部被访问到 私有属性 就是 对象 不希望公开的 属性 私有方法 就是 对象 不希望公开的 方法 定义方式 在 定义属性或方法时,在 属性名或者方法名前 增加 两个下划线,定义的就是 私有 属性或方法 ```python class Women: def __init__(self, name): self.name = name # 不要问女生的年龄 s

[有码有真相]python类私有属性等要点理解及测试示例代码

# encoding: utf-8 ''' 1. python约定类定义中"__"开头(至多一个"_"结尾)的属性为"相对"的私有属性 2. 私有属性在类及其子类定义中是"可见"的,在 其它范围正常访问是相对"不可见"的 3. 留下子类可以修改父类私有属性的口子方便debug测试等 4. 在类定义以外可以通过['_'+className+'私有属性名称']名称访问 5. 私有属性引入是避免类,实例等混淆和冲

Python全栈--9.1--面向对象进阶-super 类对象成员--类属性- 私有属性 查找源码类对象步骤 类特殊成员 isinstance issubclass 异常处理

上一篇文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对象),实例用于调用被包装在类中的函数 面向对象三大特性:封装.继承和多态 本篇将详细介绍Python 类的成员.成员修饰符.类的特殊成员. 注意点: self ,我们讲过了,self = 对象,实例化后的对象调用类的各种成员的时候的self就是这个对象. 而且我们也讲过了

【python】-- 类的实例化过程、特征、共有属性和私有属性

实例化过程 1.类的定义和语法 class dog(object): #用class定义类 "dog class" #对类的说明 def __init__(self,name): #构造函数或者是构造方法,也可以叫初始化方法 self.name = name def sayhi(self): #类方法 "sayhi funcation" #对类方法的说明 print("hello,i am a dog,my name is ",self.name