python的静态方法/类方法/属性方法

###静态方法
class Dog(object):
    def __init__(self,name):
        self.name=name
    @staticmethod#实际上和类没关系,唯一的关系就是必须通过类调用
    def eat(name,food):
        print("%s is eatting %s"%(name,food))
    @staticmethod#是一个独立的函数,但是也可以强制加入类里面,加一个self,但是调用需要把实例本身传入
    def eat1(self,food):
        print("%s is eatting %s" % (self.name, food))
d=Dog("旺财")
d.eat("w","包子")
d.eat1(d,"包子")
#静态方法:名义上归类管理,但是在静态方法里不能访问类和实例的任何属性
###类方法
class Dog(object):
    name1="包子"
    def __init__(self,name):
        self.name=name

    @classmethod#类方法:只能访问类变量不能访问实例变量
    def eat(self):
        print("%s is eatting "%(self.name1))
    @classmethod#类方法:只能访问类变量不能访问实例变量
    def eat1(name1):#注意这里只能传入类似于self 这种代表类本身的命令,记住self也是可以自定义的,比如这里
        print("%s is eatting "%(name1.name1))
d1=Dog("旺财")
d1.eat()
d1.eat1()
###属性方法
class Dog(object):

    def __init__(self,name):
        self.name=name
        self.__food=None#定义要给私有属性
    @property#属性方法:作用就是把一个方法变成一个静态属性
    def eat(self):
        print("%s is eatting %s "%(self.name,"food"))
        print(self.__food)#打印是否保存了用@eat.setter后传入的参数
    @eat.setter#如果要赋值,或则传入参数需要重写这个方法,然后在前添加@方法名.setter
    def eat(self,food):
        #print("%s is eatting %s "%(self.name,food))
        self.__food=food#赋值保存参数
    @eat.deleter#删除属性
    def eat(self):
        del self.__food
        print("删除了")
d=Dog("旺财")
d.eat#通过调用属性的方式调用方法,注意变成静态属性了,但是却不能直接赋值
d.eat="wc"#就相当于赋值,然后调用方法
print(d._Dog__food)#外部调用私有方法(廖大大说的)
d.eat
del d.eat#还有一种不建议的方式就是def d._Dog__food
##测试了一下@eat.getter这种方法可以重写原来的属性方法

猜你喜欢

转载自blog.csdn.net/qq_37181884/article/details/81951875