python(__str__、__dict__、__call__)

class Dog(object):
    #n = "Sooele"
    name = "Sooele Cooi"
    def __init__(self,name):
        self.name = name
        self.__food = None
   # @staticmethod #实际上跟类没什么关系了
   # @classmethod    #类方法
    @property   #属性 attrribue 也是属性的意思  #把一个方法变属性
    def eat(self):
        print("%s is eating %s" %(self.name,self.__food))
    @eat.setter    #修改这个属性
    def Eat(self,food):
        print("set to food:",food)
        self.__food = food
    @eat.deleter   #删除这个属性
    def eat(self):
        del self.__food
        print("del over ........")
    def talk(self):
        print("%s is taliing" % self.name)
    def __call__(self, *args, **kwargs):           #__call__
        print("running....",args,kwargs)
    def __str__(self):      ###__str__
        return "<obj:%s>" %self.name
############################################################
##构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()()
#d = Dog("Sooele")(1,2,3)          #__call__
# d(1,2,3,name=333)     #__call__
##############################################################
######################################################
# print(Dog.__dict__)   #__dict__ 查看类或对象中的所有成员,#打印类里的所有属性
# d = Dog("Sooele")    ###打印所有实例属性,不包括类属性
# print(d.__dict__)
######################################################
#################################
d = Dog("Sooele")           ###__str__
print(d)
#################################