有关类的公有属性的介绍


当前第2页 返回上一页

 

三、公有属性的特性  

  我们不仅可以访问,还能改变公有属性。 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

class Person(object):

    nationality = 'CN'   # 定义公有属性

 

    def __init__(self, name, job, phone, address):

        self.name = name

        self.job = job

        self.phone = phone

        self.address = address

 

    def sayhi(self):

        print("hell,%s" % self.name)

 

p1 = Person('Bigberg', 'Doctor', '8833421', 'hz')

p2 = Person('Ashlex', 'Police', '8833232', 'bj')

 

print(Person.nationality)  # 调用 公有属性

Person.nationality = 'us'   # 改变 公有属性

print(Person.nationality)

 

#输出

 

CN

us

  

3.1 单个实例调用和改变公有属性

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

# 依据上例

 

print("--------Befoer change---------")

print(Person.nationality)

print(p1.nationality)

print(p2.nationality)

 

print("--------after change---------")

print(Person.nationality)

p1.nationality = 'JP'

print(p1.nationality)

print(p2.nationality)

 

 

# 输出

--------Befoer change---------
CN
CN
CN
--------after change---------
US
JP
US

  p1在修改之前我们可以很好理解,因为大家都是调用的类Person的公有属性nationality,所以p1、p2的国籍属性是一样的,都是 'CN'。但是为什么在p1修改过公有属性后,p2的国籍属性没有改变呢?

  

  在我们定义一个Person类的时候,其实在内存中就已经存在了,当然也包含了这个类的公有属性。在最初实例p1去调用类Person的nationality这个属性时,是直接引用类当中nationality的内存地址,而不是自己新增一个属性叫nationality。

  如下所示: 

1

2

3

4

5

6

7

8

9

10

print(id(Person.nationality))

print(id(p1.nationality))

print(id(p2.nationality))

print(Person.nationality, p1.nationality, p2.nationality)

 

#输出

1751236836128

1751236836128

1751236836128

CN CN CN

  这就可以解释为什么在Person类中的nationality改变为 'US' 时,p2也跟着改变。因为是直接引用内存当中的值。

 

1

p1.nationality = 'JP'

  在p1直接赋值nationality这个属性后,其实就实例p1为自己新增了一个成员变量,叫做nationality。只是他们的名称相同而已,但是两者之 间并没有联系,甚至内存地址也不相同。

1

2

3

4

5

6

7

8

9

10

11

# p1.nationality = 'JP'

print(id(Person.nationality))

print(id(p1.nationality))

print(id(p2.nationality))

print(Person.nationality, p1.nationality, p2.nationality)

 

#输出

2434579585096

2434579585152

2434579585096

US JP US

  所以 p1.nationality='JP',并没有修改类Person的公有属性,而是为自己创建了一个新的成员属性,因此p1的改变对类的公有属性没有影响。

以上就是有关类的公有属性的介绍的详细内容,更多文章请关注木庄网络博客!!

返回前面的内容

相关阅读 >>

如何利用Python实现购物程序思路以及实现代码

Python下的selenium安装的过程分享

Python模块是什么?写法及作用分析

利用Python将图片转换成excel文档格式详解

为什么黑客都使用Python

Python发展前景怎么样

Python怎么统计文件中大写字母的个数?

Python3.4使用循环的实例详解

Python中记录循环次数的方法

Python中xor是什么意思

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...