面向对象之封装

面向对象三大特性:封装,继承,多态

__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')
View Code

下面这个小需求反应了构造方法的实用之处:

输入这个结果:

小明 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()
View Code

这样比非面向对象的方法省略很多代码

 对象中封装对象:

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()
View Code

面向对象之封装

  

相关推荐