zoukankan      html  css  js  c++  java
  • 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 参数,可以把它看成是一个普通的函数;

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

  • 相关阅读:
    webservice测试工具
    Spring+CXF整合来管理webservice(服务器启动发布webservice)
    BAT常用命令
    【shell入门】Shell用法
    【shell】Shell命令合集(0)
    挨踢江湖之十二
    shell一些笔记
    在优化SQL语句中使用虚拟索引
    Jenkins Maven打包出错异常的解决方法
    [置顶] ios 360度旋转效果demo
  • 原文地址:https://www.cnblogs.com/kumata/p/9367397.html
Copyright © 2011-2022 走看看