Swift51.com
麦子学院 头像
麦子学院  2017-06-09 16:39

Python学习之类中特殊成员方法详解

回复:0  查看:2096  
本文和大家分享的主要是python 特殊成员方法相关内容,一起来看看吧,希望对大家 学习python有所帮助。
  __doc__  查看尖的描述信息
  __module__ 表示当前操作的对象所在的模块
  __class__ 表示当前操作的对象所属的类
  __init__ 构造方法 通过类创建对象自动执行
  __del__ 析构方法 , 当前对象在内存中被释放自动斩妖执行
  __call__ 对象后面加括号触发执行
  __dict__ 查看类或对象中的成员
  __str__ 如果一个类中定义了此方法 , 那么打印此类对象时 , 输出此方法的返回值
  __getitem__ 当类中定义了一个字典的属性成员 , 可以获取
  __setitem__ 设置修改类中字典的数据
  __delitem__ 删除 类中字典的数据
  __metalass__ 其用来表示该类由 谁 来实例化创建
  __new__ 触发  __init__ 创建实例
   1 # usr/bin/env python
  2 #-*-coding:utf-8-*-
  3 # Author calmyan
  4
  5 from lib.ss import a
  6 # 示例类  dog
  7 class doges(object):
  8     """ 类的描述信息 """
  9     def __init__(self,name,food):
  10         self.name=name
  11         self.food=food
  12         self.data={}# 定义一个类的字典
  13     def __call__(self, *args, **kwargs):# 对象后面加括号解执行
  14         print(*args)
  15     def __str__(self):# 默认输出返回值
  16         return self.name
  17     def __getitem__(self):# 可以获取类的的字典
  18         return self.data
  19     def __setitem__(self, key, value):# 可以设置类的的字典
  20         self.data[key]=value
  21     def __delitem__(self, key):# 可以删除类的字典的内容
  22         del self.data[key]
  23 dog=doges('xxx','iii')
  24 print(dog.__doc__)
  25 b=a()
  26 print(b.__module__)# 操作的对象的那个模块
  27 print(dog.__class__)# 当前操作的对象的类是什么
  28 dog('111')#
  29 print(doges.__dict__)# 查看类或对象的成员  类只打印类的成员不打印对象的成员
  30 print(dog.__dict__)# 查看类或对象的成员 对象只打印对象的成员不打印类的成员
  31 print(dog)# 打印  __str__ 的返回值
  32 print(dog.__str__())# 打印返回值
  33
  34 dog['1']=1000# 触发 .__setitem__()
  35 dog['2']=1000# 触发 .__setitem__()
  36 print(dog.__getitem__())
  37 print(dog.__delitem__('1'))# 删除类中字典
  38 print(dog.__getitem__())
  39
  40 # 设置类的特殊方法
  41 def func(self):
  42     print('hello word%s'%self.name)
  43     print()
  44
  45 def __init__(self,name,age):
  46     self.name=name
  47     self.age=age
  48 ##type 参数  1: 类名  2. 类的基类  3. 类的成员 , 字典格式
  49 CAT=type('CAT',(object,),{'func':func,'__init__':__init__})
  50
  51 cat=CAT(' 喵喵 ',3)
  52 cat.func()
  53 print(cat.name,cat.age)
  View Code
反射: 通过字符串 调用对象中的方法
  1 # usr/bin/env python
  2 #-*-coding:utf-8-*-
  3 # Author calmyan
  4 # 反射
  5
  6 # 定义 一个新方法
  7 def bulk(self):
  8     print("%s is talking...."%self.name)
  9
  10 class DOG(object):
  11     def __init__(self,name):
  12         self.name=name
  13     def eat(self,food):
  14         print('%s is eating %s'%(self.name,food))
  15
  16 d=DOG(' 一只狗 ')
  17
  18 stres=input(' 方法 :').strip()# 手动输入方法
  19
  20 if hasattr(d,stres):# 通过字符串反射对象中的方法 , 是否存在
  21     func=getattr(d,stres)# 调用此方法
  22     func(" 骨头 ")# 执行方法
  23 else:
  24     setattr(d,stres,bulk)# 对象增加一个方法 返回一个内存地址
  25     getattr(d,stres)(d)# 调用此方法 增加的
  26     #d.talk(d)
  27 # 属性修改
  28 stres1=input(' 属性 :').strip()# 手动输入属性
  29 if hasattr(d,stres1):# 如果已经存在
  30     attr=getattr(d,stres1)# 调用
  31     a=input(' 重新赋值 :').strip()
  32     setattr(d,stres1,a)
  33     print(getattr(d,stres1))
  34 else:
  35     a=input(' 新赋值 :').strip()
  36     setattr(d,stres1,a)# 对象增加一个属性  , 赋值 返回这个属性的值
  37     print(stres1)
  38     print(getattr(d,stres1))
  39
  40 print(d.__dict__)
  41 dela=input(' 删除属性 :').strip()
  42
  43 if hasattr(d,dela):# 如果已经存在
  44     delattr(d,dela)# 进行删除
  45     print(' 删除成功 ')
  46
  47 print(d.__dict__)
  View Code
来源: 博客园