面向对象(一)

一、类和对象

#创建类,类名为mail
class mail:
#【方法】
    def email(self,mail,neirong):
        print("收件人: ",mail,"
内容: ",neirong)
        return True                              #如果不定义返回值,默认为None

#【调用】
obj = mail()                                     #创建对象,对象名obj
obj.email('Admin','你好,请查收附件表格。')          #通过对象执行方法
注:当执行obj = mail()时,类对象指针将obj指向了类mail。

二、面向对象

概念:面向对象是一种编程方式,需要类和对象来实现。

   类就是一个模板,模板里包含多个函数,函数里实现一些功能。

     对象是根据类创建的一个实例,通过实例对象可以执行类中的函数。

         面向对象也是对函数或事物进行分类和封装。

面向对象三大特性:

   封装,继承,多态

1.函数式编程和面向对象编程对比

函数式编程

def add(host,username,passwd):
    print(host,username,passwd,"add")
def remove(host,username,passwd):
    print(host,username,passwd,"remove")

def modify(host,username,passwd):
    print(host,username,passwd,"modify")

def select(host,username,passwd):
    print(host,username,passwd,"select")

#执行函数
add('host.com','admin','123')
remove('host.com','admin','123')
modify('host.com','admin','123')
select('host.com','admin','123')

面向对象编程

class SQLHelper:
    def fetch(self, sql):
        print(self.hhost)
        print(self.uuserane)
        print(self.pwd)
    def create(self, sql):
        pass
    def remove(self, nid):
        pass
    def modify(self, name):
        pass
obj1 = SQLHelper()
#以下定义的值被封装到对象obj1中,在类中可以直接调用。
obj1.hhost = "c1.salt.com"
obj1.uuserane = "alex"
obj1.pwd = "123"
obj1.fetch("select * from A")
2.什么情况下适合使用面向对象?
  当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可。

三、self是什么?

self是一个python会自动给传值的参数。

哪个对象执行方法,self就是谁。

obj1.fetch(.....)               self = obj1

四、构造函数

类中有一个特殊的方法,叫__init__方法。
当python解释器遇到类名加()时,会自动执行这个类的init方法
class S1:
    def __init__(self):
        print('自动执行init')

obj = S1()

五、封装

 封装:将内容封装到某个地方,以后再去调用被封装在某处的内容

          将内容封装到某处

   从某处调用被封装的内容

   对象可以封装任何类型的数据

1.封装字符串
class sql:
    def __init__(self,a,b,c):               #构造方法,通过类创建对象时自动执行
        print("自动执行init")
        self.hhost = a
        self.uusername = b
        self.ppasswd = c
    def create(self,sql):
        print(self.uusername)
    def select(self,sql):
        print(self.ppasswd)

obj1 = sql('admin.com','admin',123)         #将三个值分别封装到obj1(self) a,b,c属性中
obj1.select("select * from S")

#调用
print(obj1.hhost)
print(obj1.uusername)
print(obj1.ppasswd)
2.封装对象
#把对象c2_obj封装到c1_obj对象中,并赋值给c1类中的obj属性
class c2:
    def __init__(self,name,age):
        self.name = name
        self.age = age

#方法里面没有返回值,默认返回none
    def show(self):
        print('c2')
        
c2_obj = c2('c2',11)
c1_obj = c1('c1',c2_obj)
print(c1_obj.name,c1_obj.obj.name)

3.多层封装

class c1:
    def __init__(self,name,obj):
        self.name = name
        self.obj = obj
#把对象c2_obj封装到c1_obj对象中,并赋值给c1类中的obj属性
class c2:
    def __init__(self,name,age):
        self.name = name
        self.age = age

#方法里面没有返回值,默认返回none
    def show(self):
        print('c2')
class c3:
    def __init__(self,name,age):
        self.name = name
        self.age = age


c2_obj = c2('c2',11)
c1_obj = c1('c1',c2_obj)
c3_obj = c3('c3',c1_obj)

c3_obj.age.obj.show()

 六、继承与多继承

1.继承

子类可以继承父类的内容。

#子类继承父类的所有功能,相当于在子类中又复制了一份方法
#子类 ==> 父类 派生类 ==> 基类
class F1:
    def show(self):
        print('F1')
    def foo(self):
        print(self.name)
class F2(F1):
    def __init__(self):
        self.name = 1234

    def showtime(self):
        print('F2')
obj = F2()
obj.show()        #打印结果  F1
obj.foo()         #打印结果  1234
#如果子类和父类中有相同的方法,优先调用子类自己的方法。
class S1:
    def F1(self):
        self.F2()
    def F2(self):
        print('S1.F2')
class S2(S1):
    def F3(self):
        self.F1()
    def F2(self):
        print('S2.F2')

obj = S2()
obj.F3()

多继承

#多继承,查找方法
#查找方法的顺序根据传入参数的顺序
class A:
    def A(self):
        print('再找我')
class B(A):
    def B(self):
        print('先找我')
class C:
    def __init__(self):
        print('我是在创建对象时默认执行的')
    def C(self):
        print('都不行,再找我')
class D(B,C):
    def D(self):
        self.A()
obj = D()
obj.A()

#当多个子类拥有相同的父类时,方法是如何去查找和使用的

#当多个子类拥有相同的父类时,
class A0:
    def A0(self):
        print('A0')
class A1(A0):
    def A1(self):
        print('A1')
class A2(A0):
    def A2(self):
        print('A2')
class A3(A1):
    def A3(self):
        print('A3')
class A4(A2):
    def A4(self):
        print('A2')
class A5(A3,A4):
    def A5(self):
        print('A5')
obj = A5()
obj.A0()

#

class A:
    def some(self):
        print('打印我')

class D:
    def forever(self):
        self.run()

class C(D):
    def __init__(self):
        print('init2')
    def run(self):
        self.some()
class B(C):
    def __init__(self):
        print('init')
    def some(self):
        print('打印我?')

class E(A,B):
    def __init__(self):
        pass

obj = E()
obj.forever()

  


原文地址:https://www.cnblogs.com/Z-style/p/5599127.html