• Python学习笔记(27)面向对象-类


    一、类

      类的概念:类是指面向对象的编程,面向对象包含面对过程,类的思想就是化零为整的操作,把某些操作封装在一个类中后,可以通过类名.属性,类名.方法来调用

      举例:买车  

    买车:
    1、4s看车,买车 a
    2、上保险,保险公司 b
    3、交税 地税局 c
    4、交管所 上牌 d

    面向过程:以前买车需要到 a,b,c,d四个地方操作完后才能完成买车所有的东西 

    卖车处:
    1、4s
    2、保险
    3、交税
    4、上牌

    面向对象:现在将所有的买车操作手续封装到卖车处,只需要在4S店就可以完成所有的操作即可

    类:类是一个模型,包含了属性和方法,如下以Person类为例

      

     1 import time
     2 class Person(object): #新式类
     3 # class Person:#经典类
     4     country = 'China' #类变量,通过实例或者类名都可以调用
     5     def __init__(self,name,sex,color):#构造方法,也就是初始化方法,在创建时调用
     6         self.name = name #实例变量,在类中和实例中都可以调用
     7         self.sex = sex
     8         self.color = color
     9         '''__开头变量就是私有变量,只有在类中才能使用,出类的范围后失效,且私有变量无法被继承'''
    10         self.__money = 10000
    11         print('self的内存地址',id(self))
    12 
    13     '''__开头方法名就是私有方法,只能在类中使用,出了类后失效,且私有方法无法被继承'''
    14     def __secret(self):
    15         print('每个人都有自己的秘密')
    16 
    17     @classmethod
    18     def xuexi(cls):
    19         '''类方法,可通过类名和实例来调用,类方法中不能调用实例变量或者实例方法,但是可调用其他类方法'''
    20         print("爱学习")
    21         return True
    22 
    23     @classmethod
    24     def makemoney(cls):
    25         print('要挣钱要爱学习',cls.xuexi())
    26 
    27     def __del__(self):
    28         '''析构函数,在实例销毁时自动执行'''
    29         print('这是析构函数,实例销毁时自动执行')
    30 
    31     @staticmethod
    32     def help():
    33         '''静态方法一般只用来介绍类的说明,与类和方法没有多大关联性,可通过实例.方法名,类名.方法名调用'''
    34         print('这是人类的使用说明')
    35 
    36     def cry(self):#带self的都是实例方法
    37         print('%s cry....'%self.name)
    38 
    39     def fly(self):
    40         print('%s fly....'%self.name)
    41         '''调用私有变量__money'''
    42         print('需要%s元才能飞'%self.__money)
    43         '''调用私有方法__secret'''
    44         self.__secret()
    45     def eat(self):
    46         print('color',self.color)
    47         print('eat..')
    48 
    49     '''属性方法:使用装饰器property的方法,一般用来计算或处理数据,可当做变量来调用,通过实例.方法名调用即可'''
    50     @property
    51     def work_age(self):
    52         self.help()
    53         create_time = 1528860238
    54         result = (time.time()  - create_time) / (365*24*60*60)
    55         return round(result,1)
    56 
    57 ccx = Person('Tang','女','黑色')#实例化后调用init初始化方法
    58 print('实例的内存地址',id(ccx))
    59 ccx.eat()  #eat(ccx)
    60 print(ccx.work_age)#调用属性方法
    61 #类变量
    62 print(ccx.country)
    63 print(Person.country)
    64 #类方法
    65 ccx.xuexi()
    66 Person.xuexi()
    67 Person.makemoney()
    68 #静态方法
    69 ccx.help()
    70 Person.help()
    71 
    72 ccx.fly()

     

    类
            一个模型、一个例子
        实例/对象
            实例,通过模型造出来具体东西
        实例化
            把模型变成实例的过程
        继承
         封装 构造函数 类在实例化的时候,自动执行的函数 __init__ self 本类对象 self就是你实例化的那个变量 self.xxx = xxx 在别的函数里面就直接可以用了 析构函数 实例被销毁的时候自动执行的函数 __del__ 类方法
        可通过实例或者类名来调用,使用@classmethod修饰,不能调用实例变量,不能调用实例方法,但是能调用类方法 类变量
        可通过实例或者类名来调用 属性方法
        使用@property修饰,如def price(self),不可再传参数,可使用实例.函数名来调用 如 xh.price
        当某个功能有N个函数来实现,函数名比较多,使用if...else比较繁琐,可使用hasattr(类名,方法名)判断该类中是否含有这种方法名,getattr(类名,方法名)来获取对应的方法名,如,getattr(MyRequests,method)()来执行如get() post()等方法 私有 -》不是公共的,只能在类里面的函数调用,在类外面不可以调用 函数/变量以__开头,就是私有的,私有变量和私有方法不能被继承,只能在类中调用,出类后失效 实例方法
        方法中带有self入参的方法,就是实例方法,需要实例化后才能使用 实例变量
        通过self.xxx调用 一般在init构造函数中定义实例变量

      关于数据库操作的一个例子:

    class MysqlDB:
        def __init__(self,mysql_info):
            self.mysql_info = mysql_info
            self.__connect()
    
        def __del__(self):
            self.__close()
    
        def __connect(self):
            self.conn = pymysql.connect(**self.mysql_info)
            self.cursor = self.conn.cursor(pymysql.cursors.DictCursor)
    
        def execute(self,sql):
            self.cursor.execute(sql)
    
        def fetchone(self): #select * from user where username = 'xx';
            return self.cursor.fetchone()
    
        def fetchall(self):#select * from user;
            return self.cursor.fetchall()
    
        def fetchmany(self,limit):
            return self.cursor.fetchmany(limit)
    
        def __close(self):
            self.cursor.close()
            self.conn.close()
    
    mysql_info = {'host':'127.0.0.1','user':'jxz','password':'123456',
                  'port':3306,'autocommit':True,'charset':'utf8','db':'jxz'}
    m = MysqlDB(mysql_info)
    
    m.execute('select * from app_myuser where username = "liangcailian";')
    
    result = m.fetchone()
    

      

  • 相关阅读:
    Cygwin配置总结
    javap 指令集
    超好用的Vim配置
    超过 130 个你需要了解的 vim 命令
    21、面向对象
    20、MySQLdb
    深入java字符串原理及其效率分析
    数据库执行计划
    SQL中EXISTS的用法
    mybatis之foreach用法
  • 原文地址:https://www.cnblogs.com/bugoobird/p/13085589.html
Copyright © 2020-2023  润新知