• 面向对象的封装


    '''
    面向对象编程--object oriented programming,简称OOP
    OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数
    面向过程是把计算机,程序作为一系列命令集合,即一组函数的顺序执行
    
    面向对象是把计算机程序视为一组对象的集合,而每组对象都可以接受其他对象发过来的消息,并处理这条消息,
    计算机程序的执行就是这一系列消息在各个对象之间的传递
    
    面向对象的术语:
    类
    类对象
    实例对象
    属性
    函数
    方法
    
    类属性,实例属性,类方法,实例方法,以及静态方法
    '''
    class Foo():
        name = 'jon' #定义一个类属性
        __pwd = '123'#定义一个私有的类属性
        def __init__(self,name): #
            self.name = name
        #定义一个实例方法
        def func(self):
            return 'ok'
    obj = Foo('piki')    #实例化一个对象
    print(Foo.name)
    print(obj.name)
    # print(obj.__pwd) #私有属性在外部不能直接调用
    print(obj.__dict__) #在__dict__可以看出私有属性以_类名__方法明的方式保存,目的是不想在外部调用该方法
    print(Foo._Foo__pwd)
    '''
    一般在类里面定义的函数与类对象或者实例对象绑定了,所以称作为方法;
    而在类外定义的函数一般没有同对象进行绑定,就称为函数。
    '''
    
    
    
    class Foo:
        def __func(self): #私有属性在定义阶段就发生变化,_Foo__func
            print('Foo')
    class  Bar(Foo):
        def __func(self): #因为在定义阶段就发生了变化,所以子类不能继承父类的私有属性
            print('Bar')
    
    
    b = Bar()
    b._Foo__func()
    b._Bar__func()


    class A:
    def foo(self):
    print('A.foo')
    self.__bar() #调用私有方法,找不到,除了自己类以外的方法

    def __bar(self):
    print('A.bar')
    class B(A):
    def __bar(self):
    print('B.bar')

    b = B()
    b.foo()
    
    
    #property,setter,deleter 类装饰器的使用

    class Teacher():
    def __init__(self,username,password):
    if not isinstance(password,str):
    raise Exception('密码只能是字符串')
    self.__uname = username
    self.__pwd = password
    @property
    def name(self):
    return self.__uname
    @name.setter
    def name(self,val):
    print(type(val))
    if not isinstance(val,str):
    raise TypeError('must be str')
    self.__uname=val
    @name.deleter
    def name(self):
    import re
    if re.findall('(?i)sb',self.__uname): #(?i) 不区分大小写
    raise PermissionError('SB not Deleting permissions')
    else:
    del self.__uname

    egon = Teacher('egon','123')
    egon.name = ('egonSB')
    print(egon.name)

    del egon.name
     
  • 相关阅读:
    LeetCode 121. Best Time to Buy and Sell Stock
    LeetCode 221. Maximal Square
    LeetCode 152. Maximum Product Subarray
    LeetCode 53. Maximum Subarray
    LeetCode 91. Decode Ways
    LeetCode 64. Minimum Path Sum
    LeetCode 264. Ugly Number II
    LeetCode 263. Ugly Number
    LeetCode 50. Pow(x, n)
    LeetCode 279. Perfect Squares
  • 原文地址:https://www.cnblogs.com/ldq1996/p/8214616.html
Copyright © 2020-2023  润新知