• 面向对象之静态方法


    静态方法:很类似类方法

    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)
    

  • 相关阅读:
    为Jboss4配置数据库
    从JAVA源代码到EXE可执行文件
    连接数据库出现:Connections could not be acquired from the underlying database
    SVN修改用户名与密码
    linux 下开放指定端口
    Nginx 禁止IP访问及未绑定的域名跳转
    Proguard混淆后无法正常运行的问题:
    How To Automate Internet Explorer to POST Form Data
    poj 2667 hotel 线段树
    poj 3691 DNA repair AC自动机+DP
  • 原文地址:https://www.cnblogs.com/GumpYan/p/12362371.html
Copyright © 2020-2023  润新知