#coding=utf-8 class Dog(object): ''' 类的描述 ''' def __init__(self,name): self.name = name self.__food = None @staticmethod #实际上跟类没什么关系,单纯的函数,但是必须通过类名来调用 def eat(food): print ('%s is eating %s'%('xiaohuang',food)) @classmethod #类方法,只能访问类变量,不能访问实例变量 def talk(cls): print ('is talking') @property def age(self): #属性方法:把一个方法变成一个静态属性,不能直接赋值,无法直接删除,无法直接附值 print self.__food @age.setter def age(self,food): print ('%s is age %s'%(self.name,food)) #改变属性方法的值 self.__food = food @age.deleter def age(self): del self.__food def __call__(self): #对象的再次调用 obj() print '123' def __str__(self): #打印对象的时候不会返回内存地址,会返回该方法的返回值 return '12434' def __new__(cls,*args,**kwargs): print '5654765' return object.__new__(cls) d = Dog('xianghuang') d.eat('mianbao') d.age #属性方法调用 d.age = 'huangyou' #属性方法附值 d.age del d.age #属性方法删除 #print d.age print Dog.__doc__#返回类的描述 print d.__module__ #返回实例创建的地方 print d.__class__ #返回类名 print Dog.__dict__ #打印类里面的所有属性,不包括实例属性 print d.__dict__#打印所有实例属性,不包括类属性 c = Dog('xiangbai') print c #把一个字典封装成实例 # d.__getitem__ # d.__setitem__ # d.__delitem__ #__new__ 在实例化时候会执行,而且在init前执行,用来创建实例的 #类的另一种创建方式 def func(self): print 'hello word' Foo = type('Foo',(),{'talk':func}) print type(type(type('123'))) #__metaclass__ #表示这个类是由谁来创建的 class Mytype(type): def __init__(self,what,bases=None,dict=None): #第一步 super(Mytype,self).__init__(what,bases,dict) def __call__(self,*args,**kwargs): #第二步 obj = self.__new__(self,*args,**kwargs) #第二步 self.__init__(obj) class Foo(object): __metaclass__ = Mytype def __init__(self,name): #第四步 self.name = name def __new__(cls,*args,**kwargs): return object.__new__(cls,*args,**kwargs) #第三步 obj = Foo()