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 # 类属性。