一、静态方法
1、定义
在方法名前加上@staticmethod装饰器,表示此方法为静态方法
class Dog(object): def __init__(self,name): self.name = name @staticmethod #在方法前加上staticmethod 装饰器定义静态方法 def eat(): print("the dog like eat bone")
2、静态方法特性
特性:只是名义上归类管理,实际上在静态方法里访问不了类或实例中的任何属性
(1)静态方法不可以传入self参数,如果想传调用时必须传入实例本身
class Dog(object): def __init__(self,name): self.name = name @staticmethod #在方法前加上staticmethod 装饰器定义静态方法 def eat(self,food): #可以定义,但是需传入实例本身 print("{0} like eat {1}".format(self.name,food)) d=Dog("Mike") d.eat(d,"bone")#传入实例d本身,否则会报错 # 结果 Mike like eat bone
(2)静态方法可以用类直接调用,直接调用时,不可以直接传入self,否则会报错
class Dog(object): def __init__(self,name): self.name = name @staticmethod #在方法前加上staticmethod 装饰器定义静态方法 def eat(food): print("Mike like eat {0}".format(food)) Dog.eat("bone") #结果 Mike like eat bone
(3)应用场景
一般情况下我们需要使用工具包的一些个类的封装,可以用静态方法,比如os模块
import os os.system() os.mkdir()
上面两个方法没有什么必然的联系在里面,所以可以这么用
二、类方法
1、定义
在方法名前加上@classmethod装饰器,表示此方法为类方法
class Dog(object): name="Mike" def __init__(self,name): self.name = name @classmethod #定义类方法 def eat(self,food): print("{0} like eat {0}".format(self.name,food))
2、类方法特性
特性:只能访问类变量(又叫静态属性),不能访问实例变量
(1)访问实例变量
class Dog(object): def __init__(self,name): self.name = name @classmethod #定义类方法 def eat(self,food): print("{0} like eat {1}".format(self.name,food)) d=Dog("Mike") d.eat("bone") #结果 Traceback (most recent call last): File "/Users/bianbian/PycharmProjects/test/ha.py", line 9, in <module> d.eat("bone") File "/Users/bianbian/PycharmProjects/test/ha.py", line 6, in eat print("{0} like eat {1}".format(self.name,food)) AttributeError: type object ‘Dog‘ has no attribute ‘name‘
(2)访问类变量(又叫静态属性)
class Dog(object): name = "Coco" def __init__(self,name): self.name = name @classmethod #定义类方法 def eat(self,food): print("{0} like eat {1}".format(self.name,food)) d=Dog("Mike") d.eat("bone") #结果 Coco like eat bone
三、属性方法
1、定义
在方法名前加上@property装饰器,表示此方法为属性方法
原文:https://www.cnblogs.com/bianfengjie/p/10858403.html