zoukankan      html  css  js  c++  java
  • 面向对象进阶

    类的成员

    变量

      实例变量

      类变量

    方法

      实例方法   静态方法  类方法

    属性

     类的特殊成员:

    1. __doc__

    表示类的描述信息

    class Foo:
        """ 描述类信息 """
    
        def func(self):
            pass
    
    print Foo.__doc__
    #输出:类的描述信息

    2__init__

    初始化数据,通过类创建对象时,自动触发执行。   类名() 自动执行 

    class Foo:
    
        def __init__(self, name):
            self.name = name
            self.age = 18
    
    
    obj = Foo('zh') # 自动执行类中的 __init__ 方法

    3__del__

    注:此方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,析构函数的调用是由解释器在进行垃圾回收时自动触发执行的。

    class Foo:
    
        def __del__(self):
            pass

    __call__

    对象后面加括号,触发执行。   对象() 自动执行

    注:构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()()

    class Foo:
    
        def __init__(self):
            pass
        
        def __call__(self, *args, **kwargs):
    
            print '__call__'
    
    
    obj = Foo() # 执行 __init__
    obj()       # 执行 __call__

    __dict__

    类或对象中的所有成员

                class Foo(object):
                    def __init__(self,name,age):
                        self.name = name
                        self.age = age
    
                    def func(self):
                        pass
    
                obj1 = Foo('aaa',99)
                obj2 = Foo('bbb',89)
    
    
                print(obj1.__dict__) # {'name': 'aaa', 'age': 99}
                print(obj2.__dict__) # {'name': 'bbb', 'age': 89}

    __str__

    如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值。

    class Foo:
    
        def __str__(self):
            return 'zhh'
    
    
    obj = Foo()
    print obj
    # 输出:zhh

    7

    __getitem__,obj['xx']
    __setitem__,obj['xx'] = 1
    __delitem__,del obj['xx']

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
     
    class Foo(object):
     
        def __getitem__(self, key):
            print '__getitem__',key
     
        def __setitem__(self, key, value):
            print '__setitem__',key,value
     
        def __delitem__(self, key):
            print '__delitem__',key
     
     
    obj = Foo()
     
    result = obj['k1']      # 自动触发执行 __getitem__
    obj['k2'] = 'zhh'   # 自动触发执行 __setitem__
    del obj['k1']           # 自动触发执行 __delitem__

    8__iter__ 

    用于迭代器,之所以列表、字典、元组可以进行for循环,是因为类型内部定义了 __iter__ 

    class Foo(object):
        
        def __iter__(self):
            pass
    
    obj = Foo()
    
    for i in obj:
        print i
    
    # 报错:TypeError: iter() returned non-iterator of type 'NoneType'
    View Code
    class Foo(object):
    
        def __init__(self, sq):
            self.sq = sq
    
        def __iter__(self):
            return iter(self.sq)
    
    obj = Foo([11,22,33,44])
    
    for i in obj:
        print i
    View Code
    class Foo(object):
        def __init__(self,name,age):
            self.name = name
            self.age = age
    
        def func(self):
            pass
    
        def __iter__(self):
            # return iter([11,22,33,44,55,66])
    
            yield 11
            yield 22
            yield 33

    反射

    python中的反射功能是由以下四个内置函数提供:hasattr、getattr、setattr、delattr,改四个函数分别用于对对象内部执行:

    检查是否含有某成员、获取成员、设置成员、删除成员。

    class Foo(object):
     
        def __init__(self):
            self.name = 'zhh'
     
        def func(self):
            return 'func'
     
    obj = Foo()
     
    # #### 检查是否含有成员 ####
    hasattr(obj, 'name')
    hasattr(obj, 'func')
     
    # #### 获取成员 ####
    getattr(obj, 'name')
    getattr(obj, 'func')
     
    # #### 设置成员 ####
    setattr(obj, 'age', 18)
    setattr(obj, 'show', lambda num: num + 1)
     
    # #### 删除成员 ####
    delattr(obj, 'name')
    delattr(obj, 'func')
  • 相关阅读:
    HTML5 Canvas Overview
    HTML5 Canvas Tutorial
    CSS Inheritance
    Get Foreign Keys
    Spring + JdbcTemplate + JdbcDaoSupport examples
    Spring + JDBC example
    Get Primary Key Column From A Table
    python学习第19天之目录规范和常用模块之time
    python学习的第十八天模块之包、相对搜索路径和绝对搜索路径
    python学习的第十七天 模块、内置函数
  • 原文地址:https://www.cnblogs.com/xihuxiangri/p/9560116.html
Copyright © 2011-2022 走看看