对象属性与类属性

 1 # 1、直接写在class中的属性叫类属性(可以通过类名直接调用)。
 2 # 调用类属性:类名.类属性名  或 对象.属性名
 3 
 4 class Person():
 5     # 写在class中的属性叫类属性
 6     name = "lily"
 7     def __init__(self, name, age):
 8         # 写在init中,使用self.的属性称之为对象属性
 9         # self.name = "lily's mother"
10         self.age = age
11 
12 # 1、调用类属性:类名.类属性名  或 对象.属性名
13 print(Person.name)
14 
15 per1 = Person("lucy", 12)
16 print(per1.name)
17 # per1.name = "llllllll"
18 # print(per1.name)
19 
20 per2 = Person("lilei", 23)
21 # 2、调用对象属性:对象.属性名
22 print(per2.age)
23 # print(Person.age) # 错误
24 
25 # 3、对象属性的优先级高于类属性
26 # 当使用对象调用属性时,如果存在对象属性,那么使用对象属性的值,
27 # 如果没有对象属性,那么会去使用同名的类属性的值,如果没有同名类属性,
28 # 返回一个错误。
29 per3 = Person('a', 12)
30 print(per3.name)   #
31 
32 # 4、删除对象属性   del 对象名.属性名
33 # 当删除的对象时,该对象属性不能再使用,如果后期还是使用对象调用该属性时,
34 # 会去查找有没有同名的类属性,有则使用的是类属性,没有则返回错误
35 print('--------------------------------')
36 per4 = Person("abc", 34)
37 print(per4.name)  # mother
38 
39 # del per4.name
40 # print(per4.name)   # lily
41 
42 # del per4.name   # 对象属性被删除后,在该对象中已经不存在,不能再使用。
43                   # 不会影响其他对象。
44 # print(per4.name)
45 
46 # print(per4.age)  # 34
47 # del per4.age
48 # print(per4.age)
49 
50 # 5、动态添加属性: 注:在取值之前一定要赋值
51 # 语法格式: 对象名.新的属性名 = 初始值
52 # 注:只对当前对象有效,对其他对象无效。
53 
54 # per5 : age 对象属性  name 类属性
55 per5 = Person("aa", 88)
56 print(per5.age)
57 per5.weight = 54.3
58 print(per5.weight)
59 print(per5.name)
60 per5.name = "qwe"
61 print(per5.name)
62 
63 # 注:以后尽量不要将类属性与对象属性重名,原因:因为对象属性的优先级
64 # 高于类属性,对象属性会覆盖类属性,只有当对象属性不存在时,才能获取到
65 # 类属性。

 

posted @ 2019-07-31 20:12  巨菜的小鸟  阅读(859)  评论(0编辑  收藏  举报