面向对象3大特性之一:封装
封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容。
所以,在使用面向对象的封装特性时,需要:
1. 将内容封装到某处
2. 从某处调用被封装的内容
第一步:将内容封装到某处:
# 创建类 class Foo: def __init__(self, name, age): # 这是构造方法,根据类创建对象时自动执行 self.name = name self.age = age # 根据类FOO创建对象 # 自动执行Foo类的 __init__方法 obj1 = Foo('xiaohe',18) # 将xiaohe和18分别封装到obj1 和 self的name和age属性中 # 根据类FOO创建对象 # 自动执行Foo类的 __init__方法 obj2 = Foo('xiaoming',20) # 将xiaoming和20分别封装到obj1 和 self的name和age属性中
第二步:从某处调用被封装的内容:
调用被封装的内容时,有两种情况:
1. 通过对象直接调用
2. 通过self间接调用
1、通过对象直接调用被封装的内容:
class Foo: def __init__(self, name, age): self.name = name self.age = age obj1 = Foo('xiaohe',18) print(obj1.name) # 直接调用obj1对象的name属性 print(obj1.age) # 直接调用obj1对象的age属性 obj2 = Foo('xiaoming',20) print(obj2.name) # 直接调用obj2对象的name属性 print(obj2.age) # 直接调用obj2对象的age属性
2. 通过self间接调用:
class Foo: def __init__(self, name, age): self.name = name self.age = age def detail(self): print(self.name) print(self.age) # Python默认会将obj1传给self参数,即:obj1.detail(obj1),所以,此时方法内部的 self = obj1, # 即:self.name 是 xiaoming ;self.age 是 18 obj1 = Foo('xiaoming', 28) obj1.detail() # Python默认会将obj2传给self参数,即:obj1.detail(obj2),所以,此时方法内部的 self = obj2, # 即:self.name 是 xiaohe ; self.age 是 78 obj2 = Foo('xiaohe', 30) obj2.detail()
对于面向对象的封装来说,其实就是使用构造方法将内容封装到 对象 中,然后通过对象直接或者self间接获取被封装的内容。