84-面向对象:封装

面向对象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间接获取被封装的内容。

猜你喜欢

转载自www.cnblogs.com/hejianping/p/11119847.html