# -*- coding: UTF-8 -*- # 凡是在类里面定义的函数都称为方法 # 方法的本质上是函数,也是类的函数属性 ## 所有的绑定方法,定义的时候,必须有一个形参,通常写作 self ## 在调用的时候,将会把 调用者这个对象赋值给 self (谁掉用就赋值给谁) # class AP(): # # 实例的绑定方法 类的函数属性 # def __init__(self, name, hp=1000, atc=79): # self.name = name # 对象的属性 # self.hp = hp # self.atc = atc # def run(self): # print(self, id(self) ###=================类的方法=================### class Foo(): @classmethod def run(cls): """ 类方法,cls就是类 --> 调用了此方法的类 """ print(cls) @staticmethod def foo(arg1, arg2): # 定义了几个参数,必要要传几个参数 """本质上就是一个普通的函数而已,只不过是在类里面定义了""" pass obj = Foo() print(obj) ###================= @classmethod =================### #!/usr/bin/python # -*- coding: UTF-8 -*- """ classmethod 修饰符对应的函数不需要实例化, 不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数 ,可以来调用类的属性,类的方法,实例化对象等。 """ class A(object): bar = 1 def func1(self): print ('foo') @classmethod def func2(cls): print ('func2') print (cls.bar) cls().func1() # 调用 foo 方法 A.func2() # 不需要实例化 ###================= @staticmethod =================### #!/usr/bin/python # -*- coding: UTF-8 -*- class C(object): @staticmethod def f(): print('runoob'); C.f(); # 静态方法无需实例化 cobj = C() cobj.f() # 也可以实例化后调用 ###================= 菜鸡教程中的解释 =================### class A(object): # 属性默认为类属性(可以给直接被类本身调用) num = "类属性" # 实例化方法(必须实例化类之后才能被调用) def func1(self): # self : 表示实例化类后的地址id print("func1") print(self) # 类方法(不需要实例化类就可以被类本身调用) @classmethod def func2(cls): # cls : 表示没用被实例化的类本身 print("func2") print(cls) print(cls.num) cls().func1() # 不传递传递默认self参数的方法(该方法也是可以直接被类调用的,但是这样做不标准) def func3(): print("func3") print(A.num) # 属性是可以直接用类本身调用的 # A.func1() # 这样调用是会报错:因为func1()调用时需要默认传递实例化类后的地址id参数,如果不实例化类是无法调用的 A.func2() A.func3()