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

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

  • 相关阅读:
    NSRunLoop的利用
    快速排序算法
    WebViewJavascriptBridge的暂时理解
    非常喜欢的一期《晓松奇谈》
    字符串正则替换replace第二个参数是函数的问题
    Model模型和Module模块的区别
    jQuery的extend方法的深层拷贝
    正则表达式学习记录
    select2初始化默认值
    增进编程语言学习速度的小技巧
  • 原文地址:https://www.cnblogs.com/kumata/p/9367397.html
Copyright © 2011-2022 走看看