面向对象之静态方法

静态方法:很类似类方法

1.需要装饰器@staticmethod

2.静态方法是无需传递参数(如,cls,self)

3.静态方法里面也只能访问类的属性和方法,而对象的是无法访问的(即,用self.xx访问属性和访问方法是不可以的)

4.加载时机同类方法,即在对象还没有创建时,就已经加载了

class Person:
    # 类的私有属性
    __age = 18

    @classmethod
    def update_age(cls):
        cls.__age = 20
        print('----->类方法')

    @classmethod
    def show_age(cls):
        print('修改后的年龄是:', cls.__age)

    @staticmethod
    def test():
        print('------>静态方法')
        print(Person.__age)


Person.update_age()
Person.show_age()
Person.test()

 总结:

比较类方法和静态方法

不同点:

1.装饰器不同

2.类方法是有参数的,而静态方法没有参数

 

相同点:

1.只能访问类的属性和方法,对象的是无法访问的

2.都可以通过类名调用访问

3.都可以在创建对象之前使用,因为是不依赖于对象的

 

普通方法与类方法,静态方法的区别

1.普通方法没有装饰器

2.普通方法永远要依赖对象,因为每个普通方法都有一个self(因此只有对象创建了,才能调用普通方法)

 

class Spam(object):
    numInstances = 0

    @staticmethod
    def count():
        Spam.numInstances += 1

    def __init__(self):
        self.count()


class Sub(Spam):
    numInstances = 0


class Other(Spam):
    numInstances = 0


x = Spam()
y1, y2 = Sub(), Sub()
z1, z2, z3 = Other(), Other(), Other()
# 对象调用
print(x.numInstances, y1.numInstances, z1.numInstances)
# 类调用
print(Spam.numInstances, Sub.numInstances, Other.numInstances)

 

posted @ 2020-02-25 16:27  GumpYan  阅读(441)  评论(0编辑  收藏  举报