面向对象:类方法,静态方法

Posted skydragon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象:类方法,静态方法相关的知识,希望对你有一定的参考价值。

类方法

@classmethod

  只能有类名调用(对象调用,传给cls参数的也是该对象的所属类).

使用场景:

  1,无需对象参与.
  2,对类中的静态变量进行修改.
  3,在父类中类方法得到子类的类空间,为所欲为.

静态方法

  @staticmethod
  # 1,代码块.清晰.
  # 2,复用性.

# 类方法
class A:
    def func(self):  # 普通方法
        print(self)

    @classmethod  # 类方法
    def func1(cls):
        print(cls)


a1 = A()

a1.func()
A.func(a1)
# 类方法: 通过类名调用的方法,类方法中第一个参数约定俗称cls,python自动将类名(类空间)传给cls.
A.func1()
a1 = A()
a1.func1()  # 对象调用类方法,cls 得到的是类本身.

<__main__.A object at 0x000001DE71EC2E88>
<__main__.A object at 0x000001DE71EC2E88>
<class ‘__main__.A‘>
<class ‘__main__.A‘>

#类方法的应用场景:

  1, 类中 有些方法是不需要对象参与.
class A1:
    name = alex
    count = 1

    @classmethod
    def func1(cls):  # 此方法无需对象参与
        return cls.name + str(cls.count + 1)

# A1.func1(111) 不可取
a1 = A1()
a2 = A1()
print(a1.func1())
print(a2.func1())
print(A1.func1())

alex2
alex2
alex2

# 静态方法

  # 2, 对类中的静态变量进行改变,要用类方法.

  # 3,继承中,父类得到子类的类空间.
class A:
    age = 12
    @classmethod
    def func1(cls):  # 此方法无需对象参与
        # print(cls)
        # 对B类的所有的内容可以进行修改.
        print(cls.age)
        # return cls.name + str(cls.count + 1)

class B(A):
    age = 22
B.func1()

#执行结果:
22

# 不通过类方法,想让我的父类的某个方法得到子类的类空间里面的任意值.
class A:
    age = 12

    def func2(self):
        print(self)  # self 子类的对象,能得到子类 空间的任意值

class B(A):
    age = 22

b1 = B()
b1.func2()
print(B.__dict__)

#执行结果:
<__main__.B object at 0x000001CC98422E48>
{__module__: __main__, age: 22, __doc__: None}

# 静态方法:
#函数
def login(username,password):
    if username == alex and password == 123:
        print(登录成功)
    else:
        print(登录失败...)

login(alex,123)

#静态方法
class A:

    @staticmethod
    def login(username, password):
        if username == alex and password == 123:
            print(登录成功)
        else:
            print(登录失败...)


A.login(alex,1234)

#执行结果
登录成功
登录失败...
# 1,代码块.清晰.
# 2,复用性.

以上是关于面向对象:类方法,静态方法的主要内容,如果未能解决你的问题,请参考以下文章

写给小白的Python之019:面向对象-类方法静态方法

面向对象类成员之静态方法

Python面向对象静态方法,类方法,属性方法

python面向对象中类对象实例对象类变量实例变量类方法实例方法静态方法

Python-面向对象高级语法之静态方法类方法

Python面向对象之静态方法和类方法