方法.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. # -*- coding: UTF-8 -*-
  2. # 凡是在类里面定义的函数都称为方法
  3. # 方法的本质上是函数,也是类的函数属性
  4. ## 所有的绑定方法,定义的时候,必须有一个形参,通常写作 self
  5. ## 在调用的时候,将会把 调用者这个对象赋值给 self (谁掉用就赋值给谁)
  6. # class AP():
  7. # # 实例的绑定方法 类的函数属性
  8. # def __init__(self, name, hp=1000, atc=79):
  9. # self.name = name # 对象的属性
  10. # self.hp = hp
  11. # self.atc = atc
  12. # def run(self):
  13. # print(self, id(self)
  14. ###=================类的方法=================###
  15. class Foo():
  16. @classmethod
  17. def run(cls):
  18. """ 类方法,cls就是类 --> 调用了此方法的类 """
  19. print(cls)
  20. @staticmethod
  21. def foo(arg1, arg2): # 定义了几个参数,必要要传几个参数
  22. """本质上就是一个普通的函数而已,只不过是在类里面定义了"""
  23. pass
  24. obj = Foo()
  25. print(obj)
  26. ###================= @classmethod =================###
  27. #!/usr/bin/python
  28. # -*- coding: UTF-8 -*-
  29. """
  30. classmethod 修饰符对应的函数不需要实例化,
  31. 不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数
  32. ,可以来调用类的属性,类的方法,实例化对象等。
  33. """
  34. class A(object):
  35. bar = 1
  36. def func1(self):
  37. print ('foo')
  38. @classmethod
  39. def func2(cls):
  40. print ('func2')
  41. print (cls.bar)
  42. cls().func1() # 调用 foo 方法
  43. A.func2() # 不需要实例化
  44. ###================= @staticmethod =================###
  45. #!/usr/bin/python
  46. # -*- coding: UTF-8 -*-
  47. class C(object):
  48. @staticmethod
  49. def f():
  50. print('runoob');
  51. C.f(); # 静态方法无需实例化
  52. cobj = C()
  53. cobj.f() # 也可以实例化后调用
  54. ###================= 菜鸡教程中的解释 =================###
  55. class A(object):
  56. # 属性默认为类属性(可以给直接被类本身调用)
  57. num = "类属性"
  58. # 实例化方法(必须实例化类之后才能被调用)
  59. def func1(self): # self : 表示实例化类后的地址id
  60. print("func1")
  61. print(self)
  62. # 类方法(不需要实例化类就可以被类本身调用)
  63. @classmethod
  64. def func2(cls): # cls : 表示没用被实例化的类本身
  65. print("func2")
  66. print(cls)
  67. print(cls.num)
  68. cls().func1()
  69. # 不传递传递默认self参数的方法(该方法也是可以直接被类调用的,但是这样做不标准)
  70. def func3():
  71. print("func3")
  72. print(A.num) # 属性是可以直接用类本身调用的
  73. # A.func1() # 这样调用是会报错:因为func1()调用时需要默认传递实例化类后的地址id参数,如果不实例化类是无法调用的
  74. A.func2()
  75. A.func3()