类的方法包括以下几种:
- 构造方法 :__init__(self,)
- 析构方法 :__del__(self)
- 类方法@classmethod、实例方法、静态方法@staticmethod
一、构造方法
__init__(self , ...) 即使用self参数, 并把参数(argument)传递至self.val(泛指)的成员变量中。
class grade(object): def __init__(self,name,score): self.name = name self.score = score kk = grade('kumata',61) print(kk.name) print(kk.score) #输出 kumata 61
二、析构方法
__del__(self) 在对象消逝的时候被调用,当对象不再被使用时,__del__()
方法运行。
class grade(object): def __init__(self): print('score = 60!') def __del__(self): print('del !!') def my_score(self): print('i have 100 !!') >>>oo = grade() score = 60! >>>oo.my_score() i have 100 !! >>>def oo del !!
三、
1)类方法 引入装饰器@classmethod:通过类来调用方法,而不是通过实例。
class A(object): bar = 1 @classmethod def class_foo(cls): print ('Hello, kumata', cls) print (cls.bar) print(A.class_foo()) a = A() #实例的方法调用也ok print(a.class_foo()) #输出 Hello, kumata <class '__main__.A'> 1 Hello, kumata <class '__main__.A'> 1
2)实例的方法 通过实例来调用方法,而不是通过类。
class A(object): bar = 1 def class_foo(cls): print ('Hello, kumata', cls) print (cls.bar) a = A() #实例的方法调用也ok print(a.class_foo()) #输出 Hello, kumata <__main__.A object at 0x000001A9F4EADA58> 1 print(A.class_foo()) #没有@classmrthod的时候调用类方法会报错
TypeError: class_foo() missing 1 required positional argument: 'cls'
3)静态方法@staticmethod:
类中往往有一些方法跟类有关系,但是又不会改变类和实例状态的方法,这种方法是静态方法,使用 staticmethod
来装饰。
class A(object): @staticmethod def static_foo(): print ('Hello, kumata', A.bar) >>> a = A() >>> a.static_foo() Hello,kumata 1 >>> A.static_foo() Hello,kumata 1
可以看到静态方法没有 self 和 cls 参数,可以把它看成是一个普通的函数;
我们可以把它写到类外面,但这是不推荐的,因为这不利于代码的组织和命名空间的整洁。