zoukankan      html  css  js  c++  java
  • day8-Python学习笔记(十八)面向对象,self,私有,属性方法

    面向对象编程:把以前你写的那些函数封装到一个类里面

    类:定义类的时候,类名的首字母都大写,用类的话,必须得先实例化

    构造函数:类被实例化的时候,它会自动的执行构造函数。

    属性:类里面的变量
    方法:类里面的函数。

    self代表的是本类对象。

    实例就是对象,实例变量和类变量

    私有函数  __redis()
    私有变量 __host
    只能在类里面使用,出了类就不能用了。

    继承
    父类有的功能、变量子类全有。
    如果定义的类,有很多重复功能的,那就可以把这些重复的类,定义成父类
    封装

    多态 python不支持多态
    一种方法多种实现。

    实例方法,必须得实例化后才可以调用
    属性方法 你看上去好像是一个属性,其实是一个函数,也得实例化才能调用

    类方法
    不需要实例化就能直接用的,它可以使用类变量和类方法。
    #类方法,也不需要实例化,直接就能用。它静态方法高级一点
    #它可以使用类变量和类方法。

    静态方法
    不需要实例化就能直接用的,其实和类没有什么关系,就是一个普通的函数
    写在了类里面而已,也用不了self的那些东西,也调用不类里面的其他函数。
    修改父类的构造函数

    class Car():#模型,模板
    def __del__(self):
    #析构函数,这个实例被销毁的执行的。
    print('over..')

    def my_self(self):
    print(
    '我是一个汽车 我的颜色是【%s】,我有【%s】个窗户'%(self.color,self.window)
    )
    self.price = 10002
    def run(self):
    print(self.color)
    print(self.window)
    print(self.price)
    print('汽车在跑。。。')

    def __init__(self,color,window):
    #
    #构造函数,是类在初始化的时候会执行它
    #如果你的类在实例化的时候要传入一些参数,那么你就要在__init__这个函数里写参数了
    self.color = color #绑定属性
    self.window = window
    print('执行我了。。')

    #把模型做成实际的一个汽车,这个过程叫做实例化。
    bus = Car('黄色','3开门') #实例化
    bus2 = Car('黑色','4开门') #实例化
    bus3 = Car('粉色','2开门') #实例化
    bus.my_self() #
    bus2.my_self()
    bus3.my_self()

    #实例就是指具体造出来的东西,通过类实例化处理的东西,就是实例
    #对象,就是实例

    操作数据库(封装一个mysql的类)

    import pymysql
    class OpMySql1: #经典类
    pass

    class OpMySql(object):#新式类
    def __init__(self,host,user,password,db,port=3306,charset='utf8'):
    schema = {
    'user':user,
    'host':host,
    'password':password,
    'db':db,
    'port':port,
    'charset':charset
    }
    try:
    self.coon = pymysql.connect(**schema)
    except Exception as e:
    print('数据库连接异常!%s'%e)
    quit('数据库连接异常!%s'%e)
    else:#没有出异常的情况下,建立游标
    self.cur = self.coon.cursor(cursor=pymysql.cursors.DictCursor)

    def execute(self,sql):
    try:
    self.cur.execute(sql)
    except Exception as e:
    print('sql有错误%s'%e)
    return e
    if sql[:6].upper()=='SELECT':
    return self.cur.fetchall()
    else:#其他sql语句的话
    self.coon.commit()
    return 'ok'

    def __del__(self):
    self.cur.close()
    self.coon.close()

    ybq = OpMySql('211.149.218.16','jxz','123456',db='jxz') #实例化

    print(ybq.execute('select * from stu;'))
    print(ybq.execute('select * from stu;'))
    print(ybq.execute('select * from stu;'))

    self总结
    class My():
    def __init__(self,name):
    self.name = name
    self.cry()
    def cry(self): #实例方法,必须得实例化后才可以调用
    print('%s在哭。。。'%self.name)
    def learn(self):
    self.skill = ['开车']
    def my_self(self):
    print('我的名字【%s】 我会%s'%(self.name,self.skill))

    wsl = My('王思磊') # self = wsl
    wsl.skill = '浪'
    wsl.learn()
    wsl.skill.append('浪')
    wsl.skill.append('骚')
    wsl.skill.append('贱')
    wsl.my_self()
    wsl.learn()
    wsl.my_self()


    实例变量
    class Person(object):
    country = 'China' #类变量
    def __init__(self,name,age,sex):
    self.name = name #实例变量,必须实例化之后才能用,成员变量
    self.age = age
    self.sex = sex

    def say_my_country(self):
    print(self.country)

    #print(Person.country)

    # dsx = Person('大师兄',23,'男')
    # print(dsx.name)
    # print(dsx.age)
    # print(dsx.sex)
    # print(dsx.country)
    # ybq = Person('原宝青',28,'男')
     
    # 签名,作用为了作弊
    # 82B20DE4-40C2-4859-9DBC-C93B0FBFD09C
    #sign
    #1、先去用户的设备号码,md5 加密一次
    #2、再取加密之后前10位
    #3、再加盐,再给他md5一次
    #4、最后生成一个字符串

    from hashlib import md5

    class GetSign(object):
    slat = 'SDF234_&#$_12'
    def __init__(self,device_id):
    self.device_id = device_id
    def md5(self,str):
    #md5加密的
    s = str.encode()
    m = md5(s)
    return m.hexdigest()

    @property #把这个函数变成一个属性方法 ,如果这个方法没有入参,那就可以给变成一个属性方法
    def get_res(self):
    first_md5 = self.md5(self.device_id)
    tmp = first_md5[:10] #取前10位
    after_salt = tmp+self.slat
    self.sign = self.md5(after_salt)
    return self.sign

    res = GetSign('82B20DE4-40C2-4859-9DBC-C93B0FBFD09C')
    print(res.device_id)
    print(res.get_res)
    
    
     
    import redis
    class MyRedis():
    xiaohei = '哈哈哈'
    def __init__(self,host,password='',port=6379):
    self.__host = host
    self.passwd = password
    self.port = port
    self.__coon_redis()
    def __coon_redis(self):
    self.coon = redis.Redis(host=self.__host,password=self.passwd,port=self.port)
    def get(self,k):
    print('__host...',self.__host)
    return self.coon.get(k).decode()

    @staticmethod #静态方法
    def other():
    print('我是other')
    @classmethod#类方法,也不需要实例化,直接就能用。它静态方法高级一点
    #它可以使用类变量和类方法。
    def class_fun(cls):
    print(cls.xiaohei)
    cls.class_fun2()
    @classmethod
    def class_fun2(cls):
    print('我是类方法2')
    # r = MyRedis('211.149.218.16','123456')
    MyRedis.class_fun()











  • 相关阅读:
    HDU 4291 A Short problem 第37届ACM/ICPC 成都赛区网络赛1004题 (找规律,取模求循环节)
    POJ 1276 Cash Machine(多重背包)
    HDU 4296 Buildings 第37届ACM/ICPC 成都赛区网络赛1009题 (贪心)
    POJ 2392 Space Elevator (多重背包)
    Mysql配置SSL
    error C2471: cannot update program database vc90.pdb
    Android 总结 转载
    MAX SDK的INode的变换矩阵,以及Object的一些常识
    C++游戏开发需要阅读的书籍
    游戏程序员养成计划
  • 原文地址:https://www.cnblogs.com/flynn0825/p/8439899.html
Copyright © 2011-2022 走看看