zoukankan      html  css  js  c++  java
  • Python类变量

    1.概述

    可以发现:python的类变量和C++的静态变量不同,并不是由类的所有对象共享。 类本身拥有自己的类变量(保存在内存),当一个TestClass类的对象被构造时, 会将当前类变量拷贝一份给这个对象,当前类变量的值是多少,这个对象拷贝得到的类变量的值就是多少;而且,通过对象来修改类变量,并不会影响其他对象的类变量的值 ,因为大家都有各自的副本,更不会影响类本身所拥有的那个类变量的值;只有类自己才能改变类本身拥有的类变量的值

    class TestClass(object):
        # 类变量
        val1 = 100
        def __init__(self):
            # 成员变量
            self.val2 = 200
        def fcn(self, val=400):
            val3 = 300
            self.val4 = val
            self.val5 = 500
    inst = TestClass()
    
    print(TestClass.val1)  # 100
    print(inst.val1)   # 100
    print(inst.val2)    # 200
    # print(inst.val3)  # AttributeError: 'TestClass' object has no attribute 'val3'
    # print(inst.val4)    # AttributeError: 'TestClass' object has no attribute 'val4'
    # print(inst.val5)  # AttributeError: 'TestClass' object has no attribute 'val5'
    

      inst访问不到val3、val4、val5

    inst1 = TestClass()
    inst2 = TestClass()
    
    print(TestClass.val1)  # 100
    print(inst1.val1)  # 100
    
    inst1.val1 = 1000
    print(inst1.val1)  # 1000
    print(TestClass.val1)  # 100
    
    print(inst2.val1)  # 100
    # inst2.val1=22222
    TestClass.val1 = 2000   # 只有类自己才能改变类本身拥有的类变量的值。
    print(inst2.val1)  # 2000     没有重新赋值,跟类变量保存一致
    
    print(TestClass.val1)  # 2000
    print(inst1.val1)  # 1000              被重新赋值后,就跟类变量没关系了
    
    inst3 = TestClass()
    print(inst3.val1)  # 2000
    

      

    类方法的作用:(不依赖于对象)

    因为只能访问类属性和类方法,所以,可以在对象创建之前如果需要做一些功能(动作),就可以放在类方法中

    私有属性只能通过类方法,在类内部进行访问

    静态方法:很类似类方法

    1.需要装饰器@staticmethod

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

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

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

     

    选D

  • 相关阅读:
    开源 .net license tool, EasyLicense !
    Logging with NLog
    Logging with Log4net (二)
    Logging with Debug And Trace (一)
    ThoughtWorks代码挑战——FizzBuzzWhizz
    开源插件 :MahApps.Metro.IconPacks
    Java地址:
    小程序源码下载[demo整理自github]
    多块图形合并(自动合并相交块)
    Textbox
  • 原文地址:https://www.cnblogs.com/GumpYan/p/14167881.html
Copyright © 2011-2022 走看看