一、类的属性
类属性又称为静态属性。这些数据是与他们所属的类对象绑定的,不依赖于任何类实例。
类有两种属性:数据属性和函数属性
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']