zoukankan      html  css  js  c++  java
  • 面向对象的封装

    '''
    面向对象编程--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
     
  • 相关阅读:
    【转】给ExtJS的Grid增加两行tbar
    AWK使用手册
    SED单行脚本快速参考(Unix 流编辑器)
    Linux的用户和用户组管理
    Linux下中文man帮助安装。
    关于TLBB 客户端UI界面修改几个定义了解
    正则表达式30分钟入门教程
    VimDiff技巧
    CentOS 更换网易源
    Mysql数据库搭建Linux
  • 原文地址:https://www.cnblogs.com/ldq1996/p/8214616.html
Copyright © 2011-2022 走看看