zoukankan      html  css  js  c++  java
  • python面向对象1

    面向对象

    1.类  class

    用来描述具有相同的属性和芳芳的对象的集合,它定义了该集合中每个对象所共有的属性和方法。一个种类,一个模型。比如汽车模型。比如:

    #定义一个Person类

    #1.类名的首字母要大写

    #2.在python3里经典类和新式类没有任何区别

    方式一:

    class Person:   #经典类

      pass

    方式二:

    class Person(object): #新式类

      pass

    2.对象 

    指具体的东西,根据模型造出来的东西叫对象。

    3.实例

    实例和对象是同一个叫法

    4.实例化

    实例化就是造东西的过程,类的具体对象。

    5.属性

    属性其实就是变量

    6.方法

    方法就是类里面的函数

    ①.构造函数:

      def  __init__():

        pass

      1.构造函数就是类在实例化的时候执行的函数

      2.类在实例化的时候,首先会自动执行构造函数

      3.构造函数不是必须的

    ②.析构函数:

      def __del__():

        pass

      1.函数被销毁的时候被调用,当对象不再被使用时,__del__方法运行:

     实例:

    7.继承

    类的继承:代码重用

    class Zll(object):  #父类
    def __init__(self):
    self.money = 1000000000 #定义变量
    self.house = '3环里20套'
    def sing(self): #方法
    print('唱歌')
    def dance(self):
    print('跳广场舞')
    def lm(self):
    print('找朋友')

    class Zxl(Zll): #子类,Zxl()继承Zll()
    def dance(self):
    print('跳霹雳舞') #若子类里有自己的方法,在调用时会先调用子类里的方法
    ll = Zxl()  #实例化
    ll.sing() #调用方法
    ll.dance()
    print(ll.money)
    结果:

    8.封装

    将某个功能封装成一个函数

    9.多态

    以下举例介绍:

    class Person:  #经典类
    #构造函数:就是类在实例化的时候执行的函数,比如在执行实例化zll=Person()时,首先会执行构造函数
    def __init__(self):#构造函数,不是必须写的
    self.nose = 2 #鼻子 #属性
    self.head = 10 #脑子 #属性
    self.wing = 4#翅膀 #属性
    print('开始造人。。。')
    def driver(self): #方法
    print('老司机,开车非常稳')
    self.eat() #调用类里面的函数
    def fly(self): #方法
    print('在飞。。') #获取类里面的变量
    def eat(self): #方法
    print('吃火锅,吃小龙虾,喝啤酒')

    #类在用的时候,首先必须实例化,然后可以调用类里的方法或属性
    zll = Person() #实例化,类名加上括号。(造了一个人:zll,即实例化一个对象,赋给变量zll)
    zll.driver() #调用类里的方法
    print(zll.nose) #调用类里的属性



    传参:
    若构造函数里有参数时,实例化时也应该传入对应参数,比如:
    class Person(): #创建类
      def __init__(self,name): #构造函数,定义参数name
        self.name=name
        self.nose = 2
      def fly(self):
        print('%s 在飞...'%self.name) #在一个类里,通过self.xx直接调用变量,直接取传入的name
        self.eat() #通过self直接调用类里的函数
      def eat(self):
        print('%s 吃火锅,喝啤酒' %self.name)
    #实例化一个对象:
    aaa=Person('fancy') #在实例化aaa时,应该传入参数,不然会报错
    aaa.driver() #实例化aaa,调用aaa里的方法driver()

    self:
    1.self代码类的实例,self在定义类的方法时是必须有的。
    2.self代表本类对象。
    3.因为函数里面的变量都是局部变量,除了函数就不能用了,用self给对象绑定了之后,就可以self.xx调用函数或方法

    下面通举例:面向过程和面向对象

    分解需求:

    1、请求数据获取到
    2、提取到商家编码
    3、将商家编码进程2次md5 得到astr
    4、再将请求数据进行一次urldecode,urlstr
    5、astr+url_str MD5

    面向过程方式实现:
    from urllib import parse

    import hashlib
    s='vendorId=1697&posCode=pos006&ip=127.0.0.1&posVersion=2.1.1.1.1&mac=;D4-81-D7-CA-20-29;7C-67-A2-9A-06-05;7C-67-A2-9A-06-06;7C-67-A2-9A-06-09;00-00-00-00-00-0000E0'
    def get_vendorid(req_data):
    data_dict = {}
    sub_list = req_data.split('&')
    #【vendorId=1697,poscode=xxx】
    for i in sub_list:
    # verid=1697
    k,v = i.split('=')
    #[verid,1697]
    # data_dict.setdefault(k,v)
    data_dict[k]=v
    return data_dict.get('vendorId')

    def sign(req_data):
    verid = get_vendorid(req_data) #调用获取veriodid函数
    first = my_md5(verid)
    astr = my_md5(first)#两次md5
    url_str = parse.quote_plus(req_data)#url编码
    res = my_md5(astr+url_str)
    return res

    def my_md5(s):
    md = hashlib.md5()
    md.update(s.encode())
    return md.hexdigest()

    print(sign(s))
    面向对象实现:
    from urllib import parse
    import hashlib
    class Sign(object):
    def __init__(self,req_data):
    self.req_data = req_data #这写了self的话,在其他的函数里面也可以用self.xx
    self.get_verid()
    self.get_sign()
    def md5(self,s):
    md = hashlib.md5()
    md.update(s.encode())
    return md.hexdigest()

    def get_verid(self):
    data_dict = {}
    sub_list = self.req_data.split('&')
    for i in sub_list:
    k, v = i.split('=')
    data_dict[k] = v
    self.verid = data_dict.get('vendorId')
    def get_sign(self):
    frist = self.md5(self.verid)
    astr = self.md5(frist)
    url_str = parse.quote_plus(self.req_data)
    self.sign = self.md5(astr+url_str)
    return self.sign

    #1.if __name__=__main__ 这句话一般是调试的时候用的;
    #2.如果加上这句话运行本python文件,这句话不起作用;
    #3.若加上这句话,如果在其他文件导入该文件,那么该文件是不起作用的。
    if __name__ == '__main__':
    s='vendorId=1697&posCode=pos006&ip=127.0.0.1&posVersion=2.1.1.1.1&mac=;D4-81-D7-CA-20-29;7C-67-A2-9A-06-05;7C-67-A2-9A-06-06;7C-67-A2-9A-06-09;00-00-00-00-00-0000E0'
    abc = Sign(s)
    print(abc.sign)
    print('我是sign.....')




  • 相关阅读:
    JAVA内存管理
    计算机网络面试题一
    计算机网络面试题二
    【有容云干货-容器系列】补脑专用,容器生态圈脑图大放送
    PPT | Docker定义存储-让应用无痛运行
    有容云-容器安全,六招解决
    新IT运维时代 | Docker运维之最佳实践-下篇
    新IT运维时代 | Docker运维之最佳实践-上篇
    有容云-【原理】Docker存储驱动之AUFS
    【有容云案例系列】基于Jenkins和Kubernetes的CI工作流
  • 原文地址:https://www.cnblogs.com/fancyl/p/9068353.html
Copyright © 2011-2022 走看看