• Python学习(十一) Python 类


     

    Python 类

    面向对象编程是有效的软件编写方法之一。

    python程序编写方法

    • 1、函数编程,使用函数方式
    • 2、面向对象编程,使用类方式

    创建类

    创建方法
        构造方法,__init__(self,arg)
            obj = 类('a1')
        普通方法
            obj = 类(‘xxx’)
            obj.普通方法名()

    格式如下:

    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')
            # 关闭数据链接
      #封装数据库登陆IP,端口,用户名,密码
      s1 = DataBaseHelper('1.1.1.1',3306, 'jorbabe', '6666')

    面向对象三大特性

    面向对象三大特性之一:封装

    使用构造方法封装相同属性:

    def __init__(self, n,a):
            self.name = n
            self.age = a
            self.xue = 'o'
            
    b1 = Bar('jorbabe', 18)
    b2 = Bar('yunlei', 19)

    面向对象三大特性之二:继承

    1、继承

    class 父类:
        pass
        
    class 子类(父类):
        pass

    2、重写方法 防止执行父类中的方法

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

    4、

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

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

    5、Python中支持多继承

    • a. 左侧优先
    • b. 一条道走到黑
    • c. 同一个根时,根最后执

    面向对象三大特性之三:多态

    python====> 原生多态,忽略多态,python传参不用指定参数的类型。
    v = 'jorbabe'
    
    def func(arg):
        print(arg)
        
        
    func(1)
        func('jorbabe')

    类成员

    class Foo:
      #静态字段,属于类
      country = '中国'
    
        def __init__(self, name,):
            # 普通字段
            self.name = name
    
        # 普通方法
        def show(self):
            print(self.name)
    
    obj = Foo('jorbabe')
    obj.name
    obj.show()

    类成员: 字段

    • 普通字段,保存在对象中,执行只能通过对象访问
    • 静态字段,保存在类中, 执行 可以通过对象访问 也可以通过类访问

    方法

    • 普通方法,保存在类中,由对象来调用,self=》对象
    普通方法
        class Foo:
            def bar(self):
                print ('bar')
        #推荐
        obj = Foo()
        obj.bar()
    
        Foo.bar(obj)
    • 静态方法,保存在类中,由类直接调用
    #类方法
        class Foo:
            def bar(self):
                print ('bar')
            #静态方法
            @staticmethod
            def sta():
                print ('sta')
            #静态方法+传参
            @staticmethod
            def stac(a1,a2):
                print (a1,a2)
        Foo.sta()
        Foo.stac(1,2)
    
        sta
        1 2
    • 类方法,保存在类中,由类直接调用,cls=》当前类
    #类方法
        class Foo:
            def bar(self):
                print ('bar')
            #静态方法
            @staticmethod
            def sta():
                print ('sta')
            #静态方法+传参
            @staticmethod
            def stac(a1,a2):
                print (a1,a2)
            #类方法
            @classmethod
            def classmd(cls):
                #cls:类名
                print (cls)
                print ('classmd')
        
        Foo.classmd()
        
        <class '__main__.Foo'>
        classmd

    应用场景:

    • 如果对象中需要保存一些值,执行某功能时,需要使用对象中的值 -> 普通方法
    • 不需要任何对象中的值,静态方法

    属性

    class Foo:
            def __init__(self):
                self.name = 'a'
            def bar(self):
                print ('bar')
            #属性或特性
            @property
            def per(self):
                print ('per')
        
        obj = Foo()
        # obj.per()
        obj.per
    • 调用方式一一对应
    class Foo:
            def __init__(self):
                self.name = 'a'
            def bar(self):
                print ('bar')
            #属性或特性。调用方式:obj.per
            @property
            def per(self):
                # print ('per')
                return 1
            #属性传参。调用方式:obj.per = 123
            @per.setter
            def per(self,val):
                print (val)
            #属性参数删除。调用方式:del obj.per
            @per.deleter
            def per(self):
                print ('666666')
        obj = Foo()
        # obj.per()
        obj.per
        r = obj.per
        print (r)
        obj.per = 123
        
        del obj.per
    
    
        1
        123
        666666
    中国的所有省份,用面向对象知识表示?
    
    class Province:
        # 静态字段,属于类
        country =  '中国'
        
        
        def __init__(self, name):
            # 普通字段,属于对象
            self.name = name
            
    henan = Province('河南')
    henan.name
    henan.name = "河南南"
    
    
    #hebei = Province('河北')
    
    # Province.country
    print (Province.country)
    print (henan.name)
    
    中国
    河南南
    实例:利用属性功能实现分页
    class Pargination:
        #定义页码
        def __init__(self,current_page):
            #判断是否是整数
            try:
                p = int(current_page)
            except Exception as e:
                p = 1
            #页码赋值
            self.page = p
        #计算开始
        @property
        def start(self):
            val = (self.page - 1) * 10
            return val
        #计算结尾
        @property
        def end(self):
            val = self.page * 10
            return val
    #定义元组列表
    li = []
    #定义元组列表赋值
    for i in range(1000):
        li.append(i)
    while True:
        p = input ('请输入要查看的页码:')
        #给类的方法传值
        obj = Pargination(p)
        #类方法未添加属性前的调用方式
        # print (li[obj.start():obj.end()])
        #方法添加属性后的调用方式,去括号
        print (li[obj.start:obj.end])
    请输入要查看的页码:5
    [40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
    请输入要查看的页码:6
    [50, 51, 52, 53, 54, 55, 56, 57, 58, 59]
    请输入要查看的页码:aa
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    请输入要查看的页码:
  • 相关阅读:
    负载均衡
    重写类的Equals以及重写Linq下的Distinct方法
    关于URLEnCode,URLDeCode,Base64,公钥私钥
    JAVA 从头开始<六>
    JAVA 从头开始<五>
    JAVA 从头开始<四>
    JAVA 从头开始<三>
    JAVA 从头开始<二>
    JAVA 从头开始<一>
    ASP.Net MVC OA项目笔记<六>
  • 原文地址:https://www.cnblogs.com/jorbabe/p/8733829.html
Copyright © 2020-2023  润新知