1.属性相关
1.1属性和变量的区别及判定依据。
区别:概念->变量是可以改变的量值。属性是属于某个对象的特性
访问权限->变量:根据不同的位置,存在不同的访问权限(全局变量、局部变量、......)。属性:只能通过对象来进行访问(必须先找到对象;对象也是通过变量名来引用;而既然是变量,也有对应的访问权限。)。
判定依据:是否存在宿主。
1.2对象属性
怎样让一个对象拥有一些属性?(增)
(1)直接通过对象,动态添加:语法:对象.属性 = 值
# 1.定义一个类 class Person: pass # 2.根据类创建一个对象 p = Person() # 3.给p对象,增加一些属性 p.age = 18 p.Height = 180 # 4.验证一些是否有添加成功 # print(p.age) print(p.__dict__)
(2)通过类的初始化方法(构造方法):_int_方法
怎样访问一个对象的属性?(查)
怎样修改一个对象的属性(改)
p.pet = ["笑话", "小黑"] print(p.pet) p.pet.append("大黄") print(p.pet) p.pet = [1, 2] print(p.pet)
怎样删除一个对象的属性(删)
p.age = 100 del p.age print(p.age)
补充:查看对象所有的属性。对象._dict_
1.3类属性
万物皆对象,类也是一个对象
怎样让一个类拥有属性?(增)
方式1:类名.类属性 = 值
class Money: pass Money.count = 1 print(Money.count) print(Money.__dict__)
方式2:class Dog:
age = 10
count = 1
class Money: age = 19 count = 1 num = 666 print(Money.__dict__) print(Money.age) print(Money.count) print(Money.num)
怎样查询一个类的属性?(查)
通过类访问:类名.类属性
通过对象访问:对象.类属性
注意:为什么可以通过对象访问到类属性?
答:和python对象的属性查找机制有关。优先到对象自身去查找属性。找到则结束。如果没找到,则根据__class__找到对象对应的类,到这个类里面查找。
怎样修改一个类的属性?(改)
通过类名改:
能否通过对象改?
one = Money() print(one.age) Money.age = 22 print(Money.age)
怎样删除一个类的属性?(删)
通过类名删除:del 类名.属性
能否通过对象删除?答案是绝对不能。del语句只删除直系属性。
del Money.age print(Money.__dict__)
注意:类属性的内存存储问题:一般情况下,属性都存在__dict__的字典中。有些内置对象没有这个__dict__属性。
一般对象可以直接修改__dict__属性。
但类对象的__dict__属性为只读:默认无法修改。可以通过__setattr__方法修改
类属性被各个对象共享:
补充:查看一个类的所有属性:类名.__dict__
1.4对象属性和类属性之间的区别联系。
1.5高级:如何限制一个对象添加属性:
# 限制对象添加属性 class Person: __slots__ = ["age", "num"] pass p1 = Person() p1.age = 11 p1.num = 22 p2 = Person() p2.a = 9 p2.b = 6