面向对象之封装
面向对象三大特性:封装,继承,多态
__init__ # 封装:只要类名后面加(), 就会自动执行该类的__init__方法
如下:
class SQLHelper: def __init__(self, a1, a2, a3): # 可以传参数,类() __init__自动被执行 print('自动执行__init__方法') self.h_host = a1 self.u_username = a2 self.u_password = a3 def fetch(self, sql): print(self.h_host) print(self.u_username) print(self.u_password) print(sql) def create(self, sql): pass def remove(self, nid): pass def modify(self, name): pass obj = SQLHelper('c1.salt.com', 'alex', '123') obj.fetch('what')
下面这个小需求反应了构造方法的实用之处:
输入这个结果:
小明 19 男 上山去砍柴
小明 19 男 开车去东北
小明 19 男 最爱大宝剑
老李 90 男 上山去砍柴
老李 90 男 开车去东北
老李 90 男 最爱大宝剑
class Person: def __init__(self, name, age, gender): self.name = name self.age = age self.gender = gender def kanchai(self): print(self.name, self.age, self.gender, '上山去砍柴') def qudongbei(self): print(self.name, self.age, self.gender, '开车去东北') def zuiai(self): print(self.name, self.age, self.gender, '最爱大宝剑') person_1 = Person('小明', '19', '男') person_1.kanchai() person_1.qudongbei() person_1.zuiai() person_2 = Person('老李', '90', '男') person_2.kanchai() person_2.qudongbei() person_2.zuiai()
这样比非面向对象的方法省略很多代码
对象中封装对象:
class C1obj: def __init__(self, name, age): self.name = name self.age = age class C2obj: def __init__(self, name, obj): self.name = name self.obj = obj def show(self): print(self.name) class C3obj: def __init__(self, aaa): self.aaa = aaa c1 = C1obj('aa', 11) c2 = C2obj('bb', c1) print(c2.obj.age) c3 = C3obj(c2) print(c3.aaa.obj.age) c3.aaa.show()