Python面向对象基础篇之封装

在上一篇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.passwordb.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