zoukankan      html  css  js  c++  java
  • 面向对象的成员及调用方法

    '''一,面向对象的进阶
        成员
            (字段  静态字段(每个对象都有一份用 (区别:没self)),普通字段(每个对象都不同的数据用(区别:有self))
              方法  静态方法(无需使用对象封装的内用用 (区别:没self)),类方法,普通方法(使用对象中的数据用(区别:有self)),
              特性  普通特性(将方法伪造成字段的方法去执行,前提是要创建一个值去接收它。)
    
            )
            通过类访问:静态字段,静态方法(staticmethod),类方法(classmethod)
            通过对象访问:普通字段,类的方法。
            ————快速判断,类执行,对象执行 调用(有self用对象调用。无self用类调用)
        成员修饰符
        面向对象中一些常用特殊方法 __init__ __call__ __delitem__
    
    二,异常处理
    
    三,单列模式'''
    
    
    '''
    导入模块
    m = __import__('python',fromlist = True)
    去模块中寻找类
    class_name = getattr(m,'Foo')
    根据类创建对象
    obj = class_name('Alex')
    去对象中寻找name对应的值
    val = getattr(obj,'name')
    '''
    
    class Foo:
        #静态字段
        country = 'china'
    
        def __init__(self,name):
            #普通字段
            self.name = name
        #普通方法
        def show(self):
            print('111')
        @classmethod
        def xxoo(cls):
            print('class')
        #静态方法
        @staticmethod
        def xx():
            print('22')
        #特性,将方法伪造成一种字段的形式
        @property
        def end(self):
            temp = '%s pp'%self.name
            return temp
        @end.setter
        def end(self,velue):
            print(velue)
    
    #类访问静态字段
    print(Foo.country)
    #类访问静态方法
    Foo.xx()
    #类访问类方法
    Foo.xxoo()
    #特性伪造成字段的形式去访问,不用加括号。
    obj = Foo('奥巴马')
    print(obj.end)
    #字段可以重新复制
    Foo.country = '中国'
    print(Foo.country)
    '''字段既然可以重新赋值,那么伪造静态的形式,是否也可以进行重新赋值呢。当然OK了。前提是要创建一个值去接收它。 '''
    Foo.end = '123'
    print(Foo.end)
    
    '''
    成员修饰符
    (在python 里面只有两种,公有 私有,)
    私有的 只有在自己类中能调用,其它任何地方都不能访问, 包括子类。
    如果想要调用私有的,必须借助内部方法来执行。
    普通字段,静态字段,普通方法 ,静态方法,类方法,普通特性
    __call__ 执行方法 Foo()(), 或者把类赋给一个对象,然后对象 加括号执行 r = Foo(), r()。
    __getitem__执行方法,对象[]中括号去执行  t['adfa']
    ——setitem__执行方法,t['yy'] = 'uu' 就相当于給字典的一个添加 键 值
    ——delitem__执行方法, del t['adfa'] 就相当于字典中删除某个 值
    __dict__ 执行方法,查看对象和类里面的方法, print(对象.__dict__) print(类.__dict__)
    
    
    '''
    class Foo:
        """
        我是类的注释
        """
        oo = 'xx' #(属于公共的,内部外部都可以调用)
        __xx = 'oo'#(成员修饰符,只有内部可以调用,)
    
        def __init__(self):
            self.name = '牛'
    
        def __call__(self):
            print('call')
    
        def __getitem__(self,item):
            print(item)
    
        def __setitem__(self,keys,value):
            print(keys,value)
    
        def __delitem__(self,keys):
            print(keys)
    
        def fetch(self):
            print(Foo.__xx)
            print(Foo.__add())
    
        @staticmethod
        def __add():
            print('class')
    
    '''
    print(Foo.oo)
    print(Foo.__xx)
    '''
    
    t = Foo()
    t.fetch()
    t()
    t['adfa']
    t['yy'] = 'uu'
    del t['adfa']
    print(t.__dict__)
    print(Foo.__dict__)
    
    
    

      

    '''异常处理'''
    
    inp = input('输入数字')
    try:
        mun = int(inp)
        print(mun)
    #'''Exception 是一个 错误库,判断此代码出现的错误类型,然后赋值一个 对象名 接收'''
    except Exception as w:
        print(w)
    
    ''' 主动触发错误 '''
    try:
        print('123')
        raise Exception('出错了...')
    except Exception as e:
        print(e)
    
    class Foo:
        def __init__(self,arg):
            self.ox = arg
        def __str__(self):
            return self.ox
    
    obj = Foo('出错了')
    print(obj)
    
    '''assert断言, 判断是否为异常,如果是异常就会报错。'''
    assert 1==1
    assert 1==2
    

      

  • 相关阅读:
    使用 Visual Studio 来调试 dll 文件
    模拟CRC达到反调试的目的
    [CrackMe]一个关于读取文件并进行运算判断的CrackMe
    VT开启前的检测与开启
    一顿操作之后成功在win7 64版本输出VT是否可用
    C#3.0新增功能09 LINQ 基础06 LINQ 查询操作中的类型关系
    C#3.0新增功能09 LINQ 基础05 使用 LINQ 进行数据转换
    C#3.0新增功能09 LINQ 基础04 基本 LINQ 查询操作
    C#3.0新增功能09 LINQ 基础03 LINQ 和泛型类型
    C#3.0新增功能09 LINQ 基础02 LINQ 查询简介
  • 原文地址:https://www.cnblogs.com/cloniu/p/6240760.html
Copyright © 2011-2022 走看看