博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面向对象(一)
阅读量:5218 次
发布时间:2019-06-14

本文共 4449 字,大约阅读时间需要 14 分钟。

一、类和对象

#创建类,类名为mailclass mail:#【方法】    def email(self,mail,neirong):        print("收件人: ",mail,"\n内容: ",neirong)        return True                              #如果不定义返回值,默认为None#【调用】obj = mail()                                     #创建对象,对象名objobj.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):        passobj1 = 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 = agec2_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()        #打印结果  F1obj.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):        passobj = E()obj.forever()

  

 

转载于:https://www.cnblogs.com/Z-style/p/5599127.html

你可能感兴趣的文章
枚举类型(不常用)递归
查看>>
ETL
查看>>
Tomcat源码分析(六)--日志记录器和国际化
查看>>
YII缓存依赖的应用
查看>>
决策树在机器学习的理论学习与实践
查看>>
Biee 11g权限详解
查看>>
minggw 安装
查看>>
Jquery操作cookie,实现简单的记住用户名的操作
查看>>
[BZOJ1196][HNOI2006]公路修建问题 二分答案+最小生成树
查看>>
PHP基础入门(二)
查看>>
[Luogu P3119] [USACO15JAN]草鉴定Grass Cownoisseur (缩点+图上DP)
查看>>
【原创】大数据基础之Zookeeper(4)应用场景
查看>>
18款在线代码片段测试工具
查看>>
20.C++- &&,||逻辑重载操作符的缺陷、,逗号重载操作符的分析
查看>>
静态变量数组实现LRU算法
查看>>
在SQL中怎么把一列字符串拆分为多列
查看>>
中文系统 上传file的input显示英文
查看>>
css样式写一个三角形
查看>>
比callback更简洁的链式执行promise
查看>>
android permission
查看>>