• Python:面向对象


    面向过程:根据业务逻辑从上到下写垒代码

    面向对象:对函数进行分类和封装

    函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可

    类:用来描述具有相同属性和方法的对象的集合,定义了该集合中每个对象共有的属性和方法。

    方法重写:如果父类继承的方法不能满足子类的需求,可以对父类进行修改

    创建类:

    class 类名:
             成员变量
             成员函数

    例:

    class MyClass:     #定义类
        n1 = 123456
        n2 = 'abc'
        def fun(self):
            return 'hello python!'
    c = MyClass()
    print(c.n1)   #调用MyClass里面的变量n1
    print(c.n2)   #调用MyClass里面的变量n2
    print(c.fun())   #调用MyClass里面的函数fun()

    输出结果:

    123456
    abc
    hello python!

    定义有初始状态的类:类定义了 __init__() 方法的话,类的实例化操作会自动调用 __init__() 方法。__init__() 方法可以有参数,参数通过 __init__() 传递到类的实例化操作上

    def __init__(self): 
        self.data = []

    例:

    class Province:
        a = 123
        def __init__(self,name,capital):
            self.Name = name
            self.Capital = capital
    
    hb = Province('河北','石家庄')
    hn = Province('河南','郑州')
    
    print(hb.Capital)
    print(Province.a)

    输出结果:

    石家庄
    123

    类的使用:

    例1:

    class information:
        name = ''
        age = 0
        weight = 0
        def __init__(self,n,a,w):
            self.name = n
            self.age = a
            self.weight = w
        def result(self):
            print("%s:I'am %s years old now!"%(self.name,self.age))
    
    i = information('pingy',20,130)
    print(i.result())

    输出结果:

    pingy:I'am 20 years old now!

    例2:

    class temp:
        def __init__(self):
            pass
        def __del__(self):   #构建函数,在执行结束后都会执行这条函数
            print('我要释放了!')
        def func(self):
            print('go')
        def __call__(self):
            print('call')
    
    f1 = temp()
    f1.func()  #调用func函数
    f1()   #相当于执行__call__函数,只是跟普通定义的函数调用方式不一样而已

    输出结果:

    go
    call
    我要释放了!

    类的继承:

    例1:普通函数继承&继承函数内容并修改内容

    class father:
        def __init__(self):
            pass
        def func(self):
            print('class father')
        def Bad(self):
            print('抽烟,喝酒')
    
    class son(father):   #继承父类
        def __init__(self):
            pass
        def temp(self):
            print('class son')
        def Bad(self):   #在继承父类后并修改父类
            print('打篮球')
    
    res = son()
    res.temp()   #调用子类中的函数
    res.func()   #调用父类中的函数
    res.Bad()   #修改父类函数的内容

    输出结果:

    class son
    class father
    打篮球

    例2:普通函数继承,保存继承函数内容并增加内容

    class father:
        def __init__(self):
            pass
        def func(self):
            print('class father')
        def Bad(self):
            print('抽烟,喝酒')
    
    class son(father):   #继承父类
        def __init__(self):
            pass
        def temp(self):
            print('class son')
        def Bad(self):
            father.Bad(self)
            print('打牌')  #继承父类中Bad函数,并增加内容
    
    
    res = son()
    res.temp()   #调用子类中的函数
    res.func()   #调用父类中的函数
    res.Bad()   #继承父类中Bad函数,并增加内容

    输出结果:

    class son
    class father
    抽烟,喝酒
    打牌

    例3:构建函数的继承

    新式类继承方法和旧式类继承方法区别:(如下面两个例子:)

    #在2.0版本中:
    >>> class A: def __init__(self): print 'A'.center(10,'*') def save(self): print 'save from A' >>> class B(A): def __init__(self): print 'B'.center(10,'*') >>> class C(A): def __init__(self): print 'C'.center(10,'*') def save(self): print 'save from C' >>> class D(B,C): def __init__(self): print 'D'.center(10,'*') >>> c = D() ****D***** >>> c.save() save from A
    #在3.0版本中:
    class
    A: def __init__(self): print('A'.center(10,'*')) def save(self): print('save from A') class B(A): def __init__(self): print('B'.center(10,'*')) class C(A): def __init__(self): print('C'.center(10,'*')) def save(self): print('save from C') class D(C,B): def __init__(self): print('D'.center(10,'*')) c = D() c.save()

    输出结果:

    ****D*****
    save from C

    例4:旧式类继承方法

    class father:
        def __init__(self):
            print('father.__init__')
    
    class son(father):   #继承父类
        def __init__(self):
            print('son.__init__')
            print('line'.center(30,'*'))
            father.__init__(self)  #调用父类构建函数__init__函数
            
    res = son()

    输出结果:

    son.__init__
    *************line*************
    father.__init__

    例5:新式类继承方法

    #新式类继承方法
    class father(object):
        def __init__(self):
            print('father.__init__')
    
    class son(father):   #继承父类
        def __init__(self):
            print('son.__init__')
            print('line'.center(30,'*'))
            super(son,self).__init__()
    
    res = son()

    输出结果:

    son.__init__
    *************line*************
    father.__init__

    例6:

    class information:    #定义基本属性
        name = ''
        age =0
        weight = 0
    
        def __init__(self,n,a,w):   #定义构造方法
            self.name = n
            self.age = a
            self.weight = w
        def res(self):
            print("%s: I'm %s years old and the weight is %s" %(self.name,self.age,self.weight))
    
    class other(information):    #单继承方法
        grade = ''
        def __init__(self,n,a,w,g):
            information.__init__(self,n,a,w)
            self.grade = g
        def res(self):
            print("%s: I'm %s years old ,The weight is %s kg,grade %s" %(self.name,self.age,self.weight,self.grade))
    
    c = other('telnet',15,45,8)
    print(c.res())

    输出结果:

    telnet: I'm 15 years old ,the weight is 45 kg,grade 8

    多继承:

    class father:   #创建父类
        name = ''
        age = 0
        def __init__(self,n,a):   #定义构造方法
            self.name = n
            self.age = a
        def display(self):
           print("姓名:%s,年龄:%s。" %(self.name,self.age))
    
    result = father('jay1',10)
    print(result.display())
    
    print("我是分割线".center(30,'*'))
    
    class son1(father):   #创建子类1,调用父类
        weight = 0
        def __init__(self,n,a,w):
            self.weight = w
            father.__init__(self,n,a)
        def display(self):
            print("姓名:%s,年龄:%s,体重:%s" %(self.name,self.age,self.weight))
    
    result = son1('jay2',20,50)
    print(result.display())
    
    print("我是分割线".center(30,'+'))
    
    class son2(son1):   #创建子类2,调用子类1
        address = ''
        def __init__(self,n,a,w,add):
            self.address = add
            son1.__init__(self,n,a,w)
        def display(self):
            print("姓名:%s,年龄:%s,体重:%s,地址:%s。" %(self.name,self.age,self.weight,self.address))
    
    result = son2('jay3',30,60,'BeiJing')
    print(result.display())
    
    print("我是分割线".center(30,'-'))
    
    class others:   #创建另外一个类others,没有调用任何类
        job = ''
        def __init__(self,j):
            self.job = j
        def display(self):
            print("工作:%s" %self.job)
    result = others('IT')
    print(result.display())
    
    print("我是分割线".center(30,'='))
    
    class another(son2,others):  #创建另一个类another,调用子类2和others类,多重调用
        email = ''
        def __init__(self,n,a,w,add,j,e):
            self.email = e
            son2.__init__(self,n,a,w,add)
            others.__init__(self,j)
        def display(self):
            print("姓名:%s,年龄:%s,体重:%s,地址:%s,工作:%s,邮件:%s" %(self.name,self.age,self.weight,self.address,self.job,self.email))
    
    result = another('jay4',40,70,'shanghai','HR','123@qq.com')
    print(result.display())

    输出结果:

    姓名:jay1,年龄:10************我是分割线*************
    姓名:jay2,年龄:20,体重:50
    ++++++++++++我是分割线+++++++++++++
    姓名:jay3,年龄:30,体重:60,地址:BeiJing。
    ------------我是分割线-------------
    工作:IT
    ============我是分割线=============
    姓名:jay4,年龄:40,体重:70,地址:shanghai,工作:HR,邮件:123@qq.com

     类的私有方法:

    class Test:
        __secretCount = 0  #私有变量
        publicCount = 0   #公开变量
    
        def counter(self):
            self.__secretCount += 1
            self.publicCount += 1
            print(self.__secretCount)
    
    result = Test()
    print(result.counter())
    print('Line'.center(30,'+'))
    print(result.publicCount)
    print('Line'.center(30,'*'))
    print(result.__secrctCount)

    输出结果:

    1
    +++++++++++++Line+++++++++++++
    1
    *************Line*************
    Traceback (most recent call last):
        print(result.__secrctCount)
    AttributeError: 'Test' object has no attribute '__secrctCount'   #报错,私有变量不能访问。

    类的专有方法:

    class Test:
        name = 'pingy'
        age = 20
        weight = 50
        address = 'BeiJing'
    res = Test()
    
    res.job = 'IT'  #新增一个对象和属性
    1.print(res.job)
    2.print(getattr(res,'weight'))  #查看对象'weight'的属性
    3.print(hasattr(res,'address'))   #查看类中是否存在'address'对象,如果存在返回True,否则返回False
    del Test.address   #删除address对象
    4.print(hasattr(res,'address'))
    5.print(delattr(res,'job'))  #删除job
    6.print(hasattr(res,'job'))  #不存在job对象,del和delattr都是删除对象!
    res.name = 'echo'   #修改name属性
    7.print(res.name)

    输出结果:

    1.IT
    2.50
    3.True
    4.False
    5.None
    6.False
    7.echo

    类的专用方法总结:

    hasattr(res, 'age')    # 如果存在 'age' 属性返回 True。
    getattr(res, 'age')    # 返回 'age' 属性的值
    setattr(res, 'age', 8) # 添加属性 'age' 值为 8
    delattr(res, 'age')    # 删除属性 'age'

    内置类属性:

    __dict__ : 类的属性(包含一个字典,由类的数据属性组成)
    __doc__ :类的文档字符串
    __name__: 类名
    __module__: 类定义所在的模块(类的全名是'__main__.className',如果类位于一个导入模块mymod中,那么className.__module__ 等于 mymod)
    __bases__ : 类的所有父类构成元素(包含了一个由所有父类组成的元组)
  • 相关阅读:
    java中如何模拟真正的同时并发请求?
    安全并发之先行发生原则
    定时器的实现原理及参考
    kafka扫盲笔记,实战入门
    空手套白狼,硬阅java字节码class文件
    Rpc框架dubbo-client(v2.6.3) 源码阅读(二)
    如何获取java运行时动态生成的class文件?
    微软职位内部推荐-SDEII
    微软职位内部推荐-Senior SDE
    微软职位内部推荐-Software Engineer II-Senior Software Engineer for Satori
  • 原文地址:https://www.cnblogs.com/ping-y/p/5857226.html
Copyright © 2020-2023  润新知