class Dog(object):
''' 这个类是描述狗这个对象的'''
def __init__(self,name):
self.name = name
@staticmethod#实际上跟类没有什么关系了。eat和类的关系截断了,只是类下面函数
#静态方法:只是名义上归类管理,实际上在静态方法里访问不了类或实例中的任何属性
def eat(self):
print('%s is eating %s'%(self.name,'dd'))
def __call__(self, *args, **kwargs):
print("runing all",args,kwargs)
def __str__(self):#__str__ 如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值
return "DOG %s"%self.name
d = Dog('testing')
d(1,2,3,["name","age"])
print(d)
# print(Dog.__dict__)#类调用,打印类里面所有属性
# print(d.__dict__)#打印所有实例属性,不包括类属性
# print(Dog.__doc__)#显示描述信息
# from day7.属性 import Flight
# obj = Flight('test')
# print(obj.__module__)# __module__ 表示当前操作的对象在那个模块
# print(obj.__class__)# __class__ 表示当前操作的对象的类是什么
#__init__ 构造方法,通过类创建对象时,自动触发执行
#__del__析构方法,当对象在内存中被释放时,自动触发执行
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()
obj["name"] = "test"
# result = obj['k1'] # 自动触发执行 __getitem__
# obj['k2'] = 'alex' # 自动触发执行 __setitem__
# del obj['k1']