| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- # -*- 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()
|