zoukankan      html  css  js  c++  java
  • Python-Basis-14th

    周五,晴,记录生活分享点滴

    参考博客:https://www.cnblogs.com/wupeiqi/p/4493506.html

    Python版本:3.5

    面向对象(初级)

    创建类

    含义

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

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

    格式

    class + 类名

    对象 = 类名 + () 

    class Bar:  # Bar是一个类名称
    
        def foo(self, 参数):  # self是一个特殊参数,必填
            print(self, 参数)
    
    obj = Bar()  # 根据类Bar创建obj对象
    # 创建类
    class Bar:
         
        def Foo(self):
            print 'Foo'
     
        def Hello(self, name):
            print 'i am %s' %name
     
    # 根据类Bar创建对象obj
    obj = Bar()
    obj.Foo()            #执行Foo方法
    obj.Hello('chung') #执行Hello方法 

    创建方法

    构造方法

    __init__(self, 参数)

    obj = 类() 

    class Bar:
        
        def __init__(self):  # __init__ 是 python 内部调用的
            print(123)
    
    obj = Bar()  # 只要类后面加上括号,就自动执行

    普通方法

    obj = 类('xxx') 

    obj.普通方法名()

    class Bar:
    
        def foo(self):
            print(456)
    
    obj.foo()  # 通过obj主动调用foo执行

    三大特性

    封装(常用)

    将内容封装到某处

    含义:1. 将内容封装到某处

        2. 从某处调用被封装的内容

    class Foo:
        def __init__(self, n, a):
            self.name = name
            self.age = age
            self.blood = 'o'
                
    obj1 = Foo('zhangsan', 23)  # 将zhangsan和23分别封装到name、age的属性中
    obj2 = Foo('lisi', 45)  # 将lisi和45分别封装到name、age的属性中

    从某处调用被封装的内容

    方式:1. 通过对象直接调用

        2. 通过self间接调用

    # 通过对象直接调用
    
    class Foo:
     
        def __init__(self, name, age):
            self.name = name
            self.age = age
     
    obj1 = Foo('zhangsan', 23)
    print obj1.name    # 直接调用obj1对象的name属性
    print obj1.age     # 直接调用obj1对象的age属性
     
    obj2 = Foo('lisi', 45)
    print obj2.name    # 直接调用obj2对象的name属性
    print obj2.age     # 直接调用obj2对象的age属性
    # 通过 self 间接调用
    
    class Foo:
      
        def __init__(self, name, age):
            self.name = name
            self.age = age
      
        def detail(self):
            print self.name
            print self.age
      
    obj1 = Foo('zhangsan', 23)
    obj1.detail()  # Python默认会将obj1传给self参数,即:obj1.detail(obj1),所以,此时方法内部的 self = obj1,即:self.name 是 zhangsan ;self.age 是 23
      
    obj2 = Foo('lisi', 45)
    obj2.detail()  # Python默认会将obj2传给self参数,即:obj1.detail(obj2),所以,此时方法内部的 self = obj2,即:self.name 是 lisi ; self.age 是 45

    小结:

    对于面向对象的封装,使用构造方法将内容封装到对象中,

    然后通过对象直接或者self间接获取被封装的内容。

    适用场景

    如果多个函数中有一些相同参数时,转换成面向对象

    class DataBaseHelper:
        
        def __init__(self, ip, port, username, pwd):
            self.ip = ip
            self.port = port
            self.username = username
            self.pwd = pwd
        
        def add(self,content):
            # 利用self中封装的用户名、密码等   链接数据
            print('content')
            # 关闭数据链接
            
        def delete(self,content):
            # 利用self中封装的用户名、密码等   链接数据
            print('content')
            # 关闭数据链接
            
        def update(self,content):
            # 利用self中封装的用户名、密码等   链接数据
            print('content')
            # 关闭数据链接
                
        def get(self,content):
            # 利用self中封装的用户名、密码等   链接数据
            print('content')
            # 关闭数据链接
    
    s1 = DataBaseHelper('1.1.1.1', 3306, 'chung', '123456')

    封装的层层嵌套

    class F1:
    
        def __init__(self):
            self.name = 123
    
    class F2:
    
        def __init__(self, a):
            self.ff = a # [name=123]
    
    class F3:
    
        def __init__(self, b):
            self.dd = b
    
    f1 = F1()  # [name=123]
    f2 = F2(f1)# [ff=[name=123]]
    f3 = F3(f2) # [dd=[ff=[name=123]]]
    # 找到123并输出
    print(f3.dd.ff.name)

    继承

    含义

    子可以继承父的内容

    class F:  # class 父类:
        def f1(self):
            print('F.f1')        
        def f2(self):
            print('F.f2')
            
    class S(F):  # class 子类(父类):
        def s1(self):
            print('S.s1')
            
    obj = S()
    
    obj.s1()
    obj.f1()

    重写

    防止执行父类中的方法

    class F:
        def f1(self):
            print('F.f1')
            
        def f2(self):
            print('F.f2')
            
    class S(F):
        def s1(self):
            print('S.s1')
            
        def f1(self):  # 通过在子类S中重写,可以防止执行父类F中的方法
            print('S.f1')
    
    obj = S()
    
    obj.f1()

    self

    self永远是执行方法的调用者

    class F:
        def f1(self):  # self指f1的obj
            print('F.f1')
            
    class S(F):
        def s1(self):  # self指s1的obj
            print('S.s1')
            
    obj = S()
    
    obj.s1() # s1中的self是形参,此时代指 obj
    obj.f1() # self用于指调用方法的调用者

    super

    super(子类, self).父类中的方法(...)

    父类名.父类中的方法(self,...)

    class F:
        def f1(self):
            print('F.f1')
    
        def f2(self):
            print('F.f2')
    
    class S(F):
        def s1(self):
            print('S.s1')
    
        def f2(self):
            print('S.f2')  # 如果print在前,先执行S的f2;如果super在前,先执行F的f2
            super(S, self).f2()  # 第一种执行父类(基类)中的f2方法
            # F.f2(self)  # 第二种执行父类(基类)中的f2方法
    
    obj = S()
    
    obj.f2()

    多继承

    a. 左侧优先

    class F1:
        def a(self):
            print('F1.a')
    
    class F2:
        def a(self):
            print('F2.a')
    
    class S(F1,F2):  # 从左到右,先执行F1,再执行F2
        pass
    
    obj = S()
    obj.a()

    b. 一条道走到黑

    class Base:
        def a1(self):
            print('Base.a')
    
    class F0(Base):
        def a1(self):
            print('F0.a')
    
    class F1(F0):
        def a1(self):
            print('F1.a')
    
    class F2(Base):
        def a(self):
            print('F2.a')
    
    class S(F1,F2):  # 先找F1,走到尽头没有,再找F2
        pass
    
    obj = S()
    obj.a()

    c. 同一个根时,根最后执行

    class Base:
        def a(self):
            print('Base.a')
    
    class F0(Base):
        def a1(self):
            print('F0.a')
    
    class F1(F0):
        def a1(self):
            print('F1.a')
    
    class F2(Base):
        def a1(self):
            print('F2.a')
    
    class S(F1,F2):  # 当F1与F2最后的父级为同一个根时,先按顺序找完F1、F2,最后执行根
        pass
    
    obj = S()
    obj.a()

    多态

    # Java
        string v = 'chung'  # 需要指明变量的类型
    
        def func(string arg):
            print(arg)
    
        func('chung')
        func(123)
        
    # Python 
        v = 'chung'  # 直接使用变量
    
        def func(arg):
            print(arg)
    
        func(1)
        func('chung')
  • 相关阅读:
    SEO网站优化之url友好设计
    mootools版本的lightbox实现(转载)
    利用ASP.NET2.0向导控件一步步建立与用户的交互基本概念
    ATLAS,一个越来越热的技术
    数据源控件与数据绑定控件的进一步简单讨论(1)
    ASP.NET2.0技术详解与应用实例源代码下载
    ASP.NET 2.0 Club Web Site Starter Kit 补丁
    ASP.NET 图片HTML元素的重载
    一个值得收藏的CSS站点网站
    ASP.NET2.0里的配置接口API
  • 原文地址:https://www.cnblogs.com/chungzhao/p/13043136.html
Copyright © 2011-2022 走看看