python类中的静态变量输出

在Python2.7中我想创建一个静态变量来存储运行封闭类的静态方法的结果。在

我尝试了以下方法:class A:

但是引用另一个类的静态变量是有效的:class B:

这个场景的用例是缓存foo的结果,并將其放在A的名称空间中

根据答案,我了解到在执行时尚未定义A这会导致错误。

我想出了以下方法来延迟计算:class A:

这似乎能完成这项工作但有些麻烦。在

}

下午写了个获取交换机转发表的程序里边每个交换机的转发表总是递增出现,也就是说下一个交换机的地址转发表必然包含上一个交换机的转发表这显然不对。那就找愿意呗因为数据是递增的,就想到是不是后边的交换机用了前边交换机的数据就写了个程序实验一下:

很明显对象b和c用的是同一个數据空间,类似于java里类的静态成员在java中如果定义类的字段时在前边加上static,这个字段就是静态成员无论创建多少个对象,静态字段也只占用一份存储空间但是在python中我们没有定义,字段缺是静态的那么我们如果创建非静态的字段呢,看下边例子:

可以看出在方法中定义┅个字段并在字段前加上self,此字段就是非静态的

python中,在类里直接定义的字段属于这个类只有在字段前加上self,字段才属于某个对象

}

静态方法是一种普通函数就位於类定义的命名空间中,它不会对任何实例类型进行操作使用装饰器@staticmethod定义静态方法。类对象和实例都可以调用静态方法:

注意很多编程语言不允许实例调用静态方法。

类方法是将类本身作为对象进行操作的方法类方法使用@classmethod装饰器定义,其第一个参数是类约定写为cls。類对象和实例都可以调用类方法:


注意很多其他的编程语言不允许实例调用类方法。

super用来执行父类中的函数例如:


注意,Foo类必须继承某个类(并且这个继承链开始于object类)否则会报错。如果改成下面的形式:



类变量定义在类的定义之后实例变量则是以为self.开头。例如:



實例也能够访问类变量如下:




另外,可以通过以下方式访问类变量:





六、如何调用父类的构造函数

子类(派生类)并不会自动调用父类(基类)的init方法例如:

调用父类的init方法有两种,第一种:


这两种方法的运行结果均为:


不过这两种方法是有区别的

本条技术文章来源於互联网,如果无意侵犯您的权益请点击此处反馈

本文系统来源:php中文网

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信