静态方法、类方法、属性方法

时间:2021-11-15 19:28:18

静态方法:

class Dog(object):
def __init__(self,name):
self.name = name

@staticmethod #把eat方法变为静态方法
def eat(self): #实际上跟类没什么关系了,eat中self是个需要传递的普通参数,不是实例本身,跟__init__中的self不同
print("%s is eating %s" %(self.name,'dd'))

def talk(self):
print("%s is talking"% self.name)
d = Dog("ChenRonghua")
d.eat(d)
d.talk()
@staticmethod 作用就是把类内方法中的参数变为普通参数

-------------------------------------------------------------------------------------------
类方法:

class Dog(object):
name = "huazai"
def __init__(self,name):
self.name = name

@classmethod #调用变量,都是类变量,不是实例的变量
def eat(self):
print("%s is eating %s" %(self.name,'dd')) #name 是huazai

def talk(self):
print("%s is talking"% self.name)

d = Dog("ChenRonghua")
d.eat()

@classmethod 就是让方法调用的变量是类变量
def talk(self) 中self的值不是实例名,是类名Dog ,一般这样写def talk(cls)

参考:
https://www.cnblogs.com/patrick0715/p/6031321.html
-------------------------------------------------------------------------------------------
属性方法:

class Dog(object):
'''这个类是描述狗这个对象的'''

def __init__(self,name):
self.name = name
self.__food = None

@property #把一个方法变为一个属性
def eat(self):
print("%s is eating %s" %(self.name,self.__food))

@eat.setter #eat 赋值调用下面这个方法
def eat(self,food): #这个方法名称可以和 @eat.setter 中eat不一样,为了保证不产生歧义,保持一致
print("set to food:",food)
self.__food = food

@eat.deleter #删除eat调用下面这个方法
def eat(self): #这个方法名称可以和 @eat.setter 中eat不一样,为了保证不产生歧义,保持一致
del self.__food
print("删完了")

def talk(self):
print("%s is talking"% self.name)
d = Dog("ChenRonghua")
d.eat
d.eat = '包子'    #赋值eat
d.eat
del d.eat        #删除eat
#d.eat