python类也有静态变量,不妨看看类中变量的分类

时启发 2024-10-18 11:23:06

参考:《Python 3 面向对象编程(第2版)》第3章 对象相似时,该书基于python 3.4。

该书实际将python类声明中定义的变量分为了类变量、对象(或实例)变量和函数方法内部的局部变量。

1、函数方法内部的局部变量

与普通函数定义的局部变量并没有什么不同,其作用域通常在函数运行期间内,随着函数运行结束,如果不存在外部引用的话,则局部变量自动消逝。

2、对象(实例)变量

通常可见于类的初始化函数__init__之中。比如:我们声明一个联系人的类。

class Contact:

def __init__(self, name, email):

self.name = name

self.email

那么,类实例化之后,则name和email将成为实例化对象的“属性”变量。

3、类变量

在类声明中,直接定义在class 类名下面一级的变量,就叫类变量。

class Contact:

all_contacts = []

def __init__(self, name, email):

self.name = name

self.email

Contact.all_contacts.append(self)

以上代码中,all_contacts即为Contact类的类变量,其实就是今天想说的静态变量,此静态变量既可以通过类名进行访问(Contact.all_contacts),也可以通过实例化对象进行访问,但无论哪一种方式,访问的都是同一个变量。下面,我们利用内置函数id()确认一下:

classContact:

all_contacts=[]

def__init__(self,name,email) ->None:

self.name=name

self.email=email

Contact.all_contacts.append(self)

pass

if__name__=='__main__':

c=Contact('张三','zhangsan@abc.com')

d=Contact('李四','lisi@163.com')

print('c.all_contacts == d.all_contacts',c.all_contacts==d.all_contacts)

print('Contact.all_contacts == d.all_contacts',Contact.all_contacts==d.all_contacts)

print('id(c.all_contacts)',id(c.all_contacts))

print('id(d.all_contacts)',id(d.all_contacts))

print('id(Contact.all_contacts)',id(Contact.all_contacts))

forcontactinc.all_contacts:

print(contact.name,' -- ',contact.email)

将以上代码保存为当前目录的test.py中,然后在命令行执行python test.py。

运行结果

确定,一定,以及肯定是一致的。所以,是不是可以相当于其他语言中的类的静态变量(属性)了?

0 阅读:0

时启发

简介:读书笔记,编程经验,旅途见闻,人生感悟