zoukankan      html  css  js  c++  java
  • python中的定义类方法有三种形式

    • 普通方法

    • 类方法(@classmethod)

    • 静态方法(@staticmethod)

    普通方法

    创建普通的方法的方式有两种(class A() & class B()).

    class A():
        def __init__(self, name, age):
            self.name = name
            self.age = age
     
        def get_name(self):
            print('my name is', self.name)
     
        def get_age(self):
            print(f'i am {self.age} years old')
     
    class B():
        def get_name(self, name):
            print('my name is', name)
     
        def get_age(self, age):
            print(f'i am {age} years old')
     
    if __name__ == '__main__':
        a = A('tom',19)
        a.get_name()  # my name is tom
        a.get_age() # i am 19 years old
     
        b = B()
        b.get_name('tom')  # my name is tom
        b.get_age(19) # i am 19 years old
    

    class A() 中, __init__()是一个特殊的方法,相当于对A进行初始化,__init__ 中的self是对象A本身,name和age是它们的形参。

      每次调用方法之前需要对类进行实例化

    类方法

    @classmethod不需要self来表示自身了,而是用了cls来代替。

    此时不用再进行实例化了。直接 类名.函数名 进行调用。

    #Python学习交流群:725638078
    class C():
        @classmethod
        def get_name(cls, name):
            print(cls)  # <class '__main__.C'>
            print('my name is %s' % name)
     
        @classmethod
        def get_age(cls, age):
            print(f'i am %s years old' % age)
     
    if __name__ == '__main__':
        C.get_name('tom')  # my name is tom
        C.get_age(19) # i am 19 years old
    

    静态方法

    @staticmethod也是通过 类名.函数名 的方式进行调用

    静态方法不需要表示自身对象的self或者cls作为参数,跟直接使用函数是一样的。

    class D():
        @staticmethod
        def get_name(name):
            print('my name is %s' % name)
     
        @staticmethod
        def get_age(age):
            print(f'i am %s years old' % age)
     
    if __name__ == '__main__':
        D.get_name('tom')  # my name is tom
        D.get_age(19) # i am 19 years old
    

    总结

    @staticmethod 与 @classmethod在Python中称为 装饰器,

    用来修饰函数,相当于添加一个额外的功能,比如不再像普通函数那样进行实例化。

    通过使用装饰器可以让代码更加整洁,易读。用了修饰器之后,也可以进行实例化之后再调用,但是就显得多此一举了。

  • 相关阅读:
    Mysql 修改本地密码
    关于Ubuntu18.04 linux系统使用安装JDK Mysql
    关于 java编程思想第五版 《On Java 8》
    关于Ubuntu18.04 linux系统使用搜狗输入法 出现乱码
    关于Ubuntu18.04 linux系统下使用Tim QQ 微信
    项目启动时报错Instantiation of bean failed; nested exception is java.lang.ExceptionInInitializerError
    Ubuntu 16.04 LTS 64位系统 安装Docker
    安装Ubuntu服务器版 + 远程连接ssh +更换阿里云源
    机器学习-简单线性回归(一)
    机器学习-神经网络算法应用(二)
  • 原文地址:https://www.cnblogs.com/python960410445/p/15593643.html
Copyright © 2011-2022 走看看