Python进阶-----类、对象的属性的增删改查

一、类的属性

类属性又称为静态属性。这些数据是与他们所属的类对象绑定的,不依赖于任何类实例。

类有两种属性:数据属性和函数属性

1. 类的数据属性是所有对象共享的

2. 类的函数属性是绑定给对象用的
 1 class Chinese:
 2     country = 'China'
 3     def __init__(self,name):
 4         self.name = name
 5 
 6     def play_ball(self,ball):
 7         print('%s is playing %s'%(self,name,ball))
 8 
 9 def say_language(self,word):
10     print('%s 说 %s'%(self.name,word))
11 
12 #查看类属性
13 print(Chinese.country)
14 
15 #修改类属性
16 Chinese.country = 'CHINA'
17 print(Chinese.country)
18 
19 #删除类属性
20 del Chinese.country
21         
22 #增加类数据属性
23 Chinese.country = 'China'
24 Chinese.location = 'Asia'
25 print(Chinese.__dict__)
26 
27 #增加类函数属性
28 Chinese.say_language = say_language
29 p = Chinese('jony')
30 p.say_language('中国话')
31 
32 #修改类函数属性
33 def test(self):
34     print('修改了函数属性')
35 
36 Chinese.play_ball = test   #将定义好的函数名赋值为原函数属性名即可,调用时还需用原函数属性名
37 p.play_ball()
二、对象(实例)的属性

对象没有函数属性,调用的是类的函数属性
 1 class Chinese:
 2     country = 'China'
 3     def __init__(self,name):
 4         self.name = name
 5 
 6     def play_ball(self,ball):
 7         print('%s is playing %s'%(self,name,ball))
 8 
 9 p1 = Chinese('Tony')
10 print(p1.__dict__)
11 
12 #查看实例的属性
13 print(p1.name)
14 print(p1.play_ball)    #实则调用了类的函数属性
15 
16 #增加实例的属性(一般没有给对象添加函数属性,因为class不会为你自动传入self参数)
17 p1.age = 18
18 print(p1.__dict__)
19 
20 #修改实例的属性
21 p1.age = 20
22 print(p1.__dict__)
23 
24 #删除实例的属性
25 del p1.age
26 print(p1.__dict__)
三、属性的调用

在类内定义的变量均存放在属性字典内。
如果是以点方式来调用,则在类环境里寻找,自下而上寻找。
如果直接变量名,则寻找的是类的外部全局变量。
如果不是通过直接赋值对实例属性进行修改,若改属性实例不存在,类存在,则可以通过实例进行修改,如下示例:
 1 class Chinese:
 2     country = 'China'
 3     l = ['a','b']
 4     def __init__(self,name):
 5         self.name = name
 6 
 7     def play_ball(self,ball):
 8         print('%s is playing %s'%(self,name,ball))
 9 p2 = Chinese('Jerry')
10 p2.l.append('c')
11 print(Chinese.l)    #['a','b','c']

 

posted @ 2018-10-14 23:04  Meanwey  阅读(591)  评论(0编辑  收藏  举报