python面向对象:类方法

类的方法包括以下几种:

  • 构造方法 :__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 参数,可以把它看成是一个普通的函数;

我们可以把它写到类外面,但这是不推荐的,因为这不利于代码的组织和命名空间的整洁。

上一篇:UITableView滑动按钮的操作


下一篇:CMDB资产采集