#__module__ __class__

Lib\aa.py

class C:
def __init__(self):
self.name='lwb'

当前目录

index.py

from lib.aa import C
obj=C()
print( obj.__module__) #输出类来自哪个模块 输出lib.aa ,即:输出模块
print(obj.__class__) #输出类本身名 输出类 lib.aa.C

#__dict__ __doc__ __str__

class Dog(object):

'''定义Dog类'''
def __init__(self,name):
self.name=name
self.__food=None #空变量

@property #方法转属性(函数转变量)
def eat(self):
print("%s is eating %s"%(self.name,self.__food)) #先传一个空变量 self.__food
@eat.setter #修改
def eat(self,food):
print("set to food:",food)
self.__food=food #将food传入 空变量
@eat.deleter #删除
def eat(self):
del self.__food
print("删完了")

def __call__(self,*args,**kwargs):
print("runing call",args,kwargs)

def __str__(self):
return "<obj:%s>"%self.name

d=Dog("chenronghua")
d() #加了括号不能引用 调用的是__call__方法
d(1,2,3,name1="lei") #调用的是__call__方法,还可以传入参数字典
Dog("chenronghua")()

#查看属性

Print(Dog.__doc__) #输出类的描述信息
print(Dog.__dict__) #__dict__ 打印类里的所有属性,不包括实例属性
print(d.__dict__) #__dict__ 打印所有实例属性,不包括类属性

print(d) #本来打印d这个对象的内存地址 定义__str__ 之后 ,就以__str__下的特定显示方式显示,不在显示内存地址,比如让他显示对象里面特定的属性

#__getitem__ __setitem__ __delitem__
class Foo(object):
def __init__(self):
self.data={} #初始化成字典
def __getitem__(self, key):
print('__getitem__', key)
return self.data.get(key)

def __setitem__(self, key, value):
print('__setitem__', key, value)
self.data[key]=value #实例变成字典


def __delitem__(self, key):
print('__delitem__', key)

obj=Foo()
obj["name"]="alex" #运行__setitem__
print(obj.data) #运行__setitem__ self.data[key]=value 生成字典

print(obj["name"]) #运行__getitem__ 并打印返回name的value 值


del obj["name"] #运行__delitem__ 并不是真正删除name key