美文网首页
面向对象3--类的特殊成员、反射

面向对象3--类的特殊成员、反射

作者: 狗狗胖妞 | 来源:发表于2017-05-09 10:58 被阅读52次

什么时候适用面向对象?

  • 如果多个函数须传入多个共同的参数时
  • 根据一个模板创建某些东西
  • (ssh)

类的特殊成员

1. __doc__ #输出:类的描述信息

2. __module__ 和 __class__
  __module__ 表示当前操作的对象在那个模块
  __class__ 表示当前操作的对象的类是什么

3. __init__
  构造方法,通过类创建对象时,自动触发执行。

4. __del__
  析构方法,当对象在内存中被释放时,自动触发执行。

5. __call__
  对象后面加括号,触发执行。即: 对象() 或 类()()

class Foo:
    def __init__(self):
        pass

    def __call__(self, *args, **kwargs):
        print('__call__')


obj = Foo()  # 执行 __init__
obj()  # 执行 __call__

6. __dict__ 类或对象中的所有成员

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

8. __getitem__ __setitem__ __delitem__
  类似字典一样索引的操作,以上分别表示获取,设置,删除。(当在类外面做了这些操作后触发这些函数,甚至可删除不存在的数据)

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'] = 'wupeiqi'      # 自动触发执行 __setitem__
del obj['k1']              # 自动触发执行 __delitem__

__getitem__ k1
__setitem__ k2 wupeiqi
__delitem__ k1

9. __new__ 用来将类实例化的

def __new__(cls,*args,**kwargs):   #重构__new__方法:在实例化之前做些事情
    print("Foo --new--")
    return object.__new__(cls)     #继承父类的__new__方法(此时cls是一个对象)

反射(用户交互)

hasattr(obj,name_str) 判断一个对象obj中是否有对应的name_str字符串方法,返回布尔值
getattr(obj,name_str) 根据字符串去获取obj对象里的对应方法的内存地址
setattr(d,name_str,[new]) 给对象的属性\方法重新定义,若不存在,先创建再赋值。

class Dog(object):
    def __init__(self,name):
        self.name = name
    def eat(self,food):
        print("%s is eating %s" %(self.name,food))

def bulk(name):
    print("%s is yelling ..." %name)

d = Dog("xiaohei")
choice = input(">>: ").strip()
if hasattr(d,choice):
    func = getattr(d,choice)
    func("xiaoqiang")
else:
    # setattr(d,choice,"black")     #--1--  设置变量
    # v = getattr(d,choice)
    # print(v)
    setattr(d,choice,bulk)       #--2--  设置方法
    bulk(d.name)

相关文章

  • 面向对象3--类的特殊成员、反射

    什么时候适用面向对象? 如果多个函数须传入多个共同的参数时 根据一个模板创建某些东西 (ssh) 类的特殊成员 1...

  • java学习笔记#10-反射机制

    CLASS类的使用 方法的反射 CLASS类的使用 在面向对象的中,几乎所有的内容都是对象,除了静态成员和基本类型...

  • python09-面向对象(二) & 异常

    面向对象 回顾:反射:以字符串的形式去某个对象(模块,类,对象)操作它的成员(python中,一切皆对象)# 从模...

  • 2020-07-04【反射】

    类加载 类加载器 反射概述 获取Class类的对象 反射获取构造方法并使用 反射获取成员遍历并使用 反射获取成员方...

  • Python学习笔记5

    面向对象 类和对象的创建 属相相关 方法相关 元类 内置的特殊属性 内置的特殊方法 面向对象 类和对象的创建 类 ...

  • Dart教程(三):类的定义和使用

    类 特点: 面向对象 mixin继承 所有的类都继承自object 一、类的实例变量(成员变量) 对象的成员包括:...

  • 07-类与对象

    类与对象 回想一下,面向对象有哪些常见知识点 类 对象 成员变量,成员函数 封装,继承,多态 ...... 类 在...

  • JS对象,原型

    面向对象 是一种思维方式三大特点:继承,多态,封装几个概念: 类,对象,属性,方法,成员,类成员,实例成员,静态类...

  • python 进阶 面向对象(二)

    利用反射查看面向对象成员归属# s1模块 class Foo: country = "Chin...

  • 15_中级C#

    类的定义 面向对象编程,结构化编程 类,定义了每一个对象 类,就是创造对象的模板,数据+功能 类的成员,数据成员+...

网友评论

      本文标题:面向对象3--类的特殊成员、反射

      本文链接:https://www.haomeiwen.com/subject/ohnetxtx.html