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 参数,可以把它看成是一个普通的函数;

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

猜你喜欢

转载自www.cnblogs.com/kumata/p/9367397.html