`
heipark
  • 浏览: 2094581 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

python类变量,类方法,静态方法

 
阅读更多

一、class object、class variable

首先class在python里面是一个对象,它有独立区域存储属于自己的数据,而不需要实例化。

 

class Hehe(object):
     
    count = 0 # class variable
     
    def __init__(self, c):
        Hehe.count = Hehe.count + c
         
        
        print 'addres same' if id(Hehe.count) == id(self.count) else 'addres not same'
        #addres same
         
        self.count = self.count + c # instance variable
         
        print 'addres same' if id(Hehe.count) == id(self.count) else 'addres not same'
        #addres not same

        print 'class var: %d' %Hehe.count
        print 'instance var: %d' %self.count

     
h1 = Hehe(1)
print ''
h2 = Hehe(10)

输出:
addres same
addres not same
class var: 1
instance var: 2

addres same
addres not same
class var: 11
instance var: 21

 

 结论:

  1. instance 变量未赋值前value为class 变量地址是一样的,赋值后,地址发生变更,这说明class变量与instance变量是两个引用
  2. instance 变量生存范围在instance层级,class变量生存在class 对象里

二、@classmethod和@staticmethod

 

class Hehe(object):
     
    count = 0 # class variable
     
    def __init__(self, c):
        Hehe.count = Hehe.count + c
        self.count = self.count + c # instance variable
                  
    @classmethod
    def get_class_count(cls_obj):
        return cls_obj.count

    @staticmethod
    def a_static_method():
        pass
h1 = Hehe(1)
 
# class level
print h1.get_class_count()
# 11
print h1.count
# 2
 
# instance level
print Hehe.get_class_count()
# 11
print Hehe.count
# 11

结论:

  1. @classmethod标记的方法可以通过class直接调用,因为第一个参数包含class object,所以可以拿到class variable
  2. @staticmethod和@classmethod都可以被class直接调用,但@staticmethod拿到不到class object

贴个stackflow的图片:

http://stackoverflow.com/questions/12179271/python-classmethod-and-staticmethod-for-beginner



 

 

 

 -end 

  • 大小: 31 KB
分享到:
评论

相关推荐

    python局部变量全局变量-静态方法-实例变量静态变量代码解析

    python局部变量全局变量-静态方法-实例变量静态变量代码解析。

    python类和函数中使用静态变量的方法

    在Python编程语言中,类和函数的静态变量通常是指那些在多次调用中保持其值不变的变量。静态变量在其他面向对象的语言如Java或C#中比较常见,但在Python中,由于其动态特性的存在,实现静态变量的方式稍有不同。本篇...

    详解Python中的静态方法与类成员方法

    ### Python中的静态方法与类成员方法详解 #### 前言 在Python编程语言中,类的方法有两种特殊的形式:静态方法(Static Method)和类成员方法(Class Method)。这两种方法在设计模式、类的设计以及代码复用方面...

    python实现类的静态变量用法实例

    本文实例讲述了python类的静态变量用法。分享给大家供大家参考。具体分析如下: 这里使用静态变量目的是在类中实现一个静态的队列,这里用数组实现,任何时候插入到队列中的数据不会和类的实例有直接关系。 __...

    python中类变量与成员变量的使用注意点总结

    - 在类定义中,可以使用 `@classmethod` 或 `@staticmethod` 来更好地控制类方法和静态方法的行为,从而避免不必要的类变量使用。 #### 结论 通过本文的介绍,我们了解了Python中类变量与成员变量的区别及其使用...

    python中的对象方法、类方法、静态方法.pdf

    Python中的方法分为三种类型:对象方法、类方法和静态方法。这些方法在定义和调用时各有不同,分别承担着不同的职责和功能。下面将详细介绍这三种方法的区别和使用场景。 对象方法: 对象方法是类中最常见的方法...

    python如何设置静态变量

    在Python编程语言中,虽然没有内置的静态变量概念,但我们可以使用不同的方法来模拟静态变量的行为。静态变量通常用于在函数或方法中保留其值,即使在多次调用之间也是如此。这种特性在某些编程场景中非常有用,例如...

    python 3.7 静态变量和内部变量的bug(csdn)————程序.pdf

    然而,Python并没有提供类似Java的`static`关键字来声明静态方法,但可以使用类方法(classmethod)和静态方法(staticmethod)来实现类似的功能。类方法通过`@classmethod`装饰器定义,接收第一个参数为类本身;...

    解析python 类方法、对象方法、静态方法

    Python中的类方法、对象方法和静态方法是面向对象编程中的重要概念,它们分别有不同的作用和使用场景。在Python中,这些方法都是通过修饰器(decorator)来实现的。 1. 对象方法(Instance Method) 对象方法是与...

    Python 类的说明

    下面将详细解释这些知识点,包括类变量、实例变量、方法类型(如实例方法、静态方法和类方法)以及继承等方面的内容。 ### 1. 类变量与实例变量 #### 类变量 在Python中,类变量是所有实例共享的变量,即所有对象...

    理解java和python类变量以及类的成员变量

    `add` 方法展示了如何修改类变量,`print` 方法则显示了类变量和成员变量的内存地址,表明它们是独立的。 总结来说,类变量在Java和Python中都是共享的,由类的所有实例共享,而成员变量是每个实例独有的。类变量...

    Python面向对象之类和对象实例详解

    #实例变量:定义在方法中的变量,只作用于当前实例的类。 例子: class Turtle:#python 中类名约定以大写字母开头 '''关于类的简单例子。。。''' #属性 == 类变量 color ="green" weight="10kg" legs=4 shell...

    Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析

    3. **静态方法**不依赖于类或实例的状态,可以在不创建类实例的情况下直接调用,通常使用`@staticmethod`装饰器定义。 ```python @staticmethod def static_foo(x): print("executing static_foo(%s)" % x) ``...

    Python语言基础:类的变量方法.pptx

    Python是一种高级编程语言,以其...了解类的变量和方法,包括构造方法`__init__`、私有成员、静态方法和类方法,对于掌握Python面向对象编程至关重要。理解并熟练运用这些概念,将有助于编写更加高效和易于维护的代码。

    python中的实例方法、静态方法、类方法、类变量和实例变量浅析

    实例方法就是类的实例能够使用的方法。如下:复制代码 代码如下:class Foo: def __init__(self, name): self.name = name def hi(self): print self.name if __name__ == ‘__main__’: foo01 = Foo(‘letian’...

    python安装-08-静态方法.ev4.rar

    在Python编程中,了解和掌握类、对象以及方法是至关重要的,尤其是静态方法,这是本教程"python安装-08-静态方法.ev4"的重点内容。 在面向对象编程(OOP)中,静态方法是一种特殊类型的方法,它与类而不是类的实例...

Global site tag (gtag.js) - Google Analytics