在上一篇Python面向对象的开篇中,简单介绍了Python下的封装特性,主要封装的对象是基本数据类型,Python中除了可以封装基本数据类型外,还可以封装类似于list,tuple,set等常见的引用数据类型,甚至可以封装我们自定义的对象。
本篇就是主要介绍Python的对象中封装对象的功能及实现。
对象中封装对象实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class A: def __init__(self, host, b_obj): self.host = host self.b_obj = b_obj class B: def __init__(self, username, password): self.username = username self.password = password def show(self): print('class B func show') b = B('ps', 'password') a = A('192.168.1.1', b) print(a.b_obj.username) print(a.b_obj.password) a.b_obj.show() print(a.host)
------------ ps password class B func show 192.168.1.1
|
- 第1-4行:定义了一个A类,构造方法中,接收两个参数,一个是主机名,一个是账户对象(注意,这里接收的是一个对象)
- 第6-9行:定义了一个B类,构造方法接收用户名和密码两个字符串参数
- 第11-12行:B类中的一个对象方法
- 第14行:实例化一个B类的对象
- 第15行:实例化一个A类的对象,并将B类的对象b当做参数传递给A类的构造方法
- 第16行:a对象的第二个成员变量是一个B类型的对象,a.b_obj指向的就是B类的对象b,而a.b_obj.username等同于执行了b.username
- 第17-18行:同理,等同于执行了
b.password
和b.show()
接下来感受一下对象中封装两层对象的情况
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| class A: def __init__(self, host, b_obj): self.host = host self.b_obj = b_obj class B: def __init__(self, username, password): self.username = username self.password = password def show(self): print('class B func show') class C: def __init__(self, db, a_obj): self.db = db self.a_obj = a_obj b = B('ps', 'password') a = A('192.168.1.1', b) c = C('MySQL', a)
print(c.a_obj.b_obj.username) print(c.a_obj.b_obj.password) c.a_obj.b_obj.show()
------------ ps password class B func show
|