test.py下的setup_credentials函数中的if语句不太明白

weirise 发布于 2016/07/04 18:11
阅读 361
收藏 0

开源软件供应链点亮计划,等你来!>>>

大家好,

   最近在做tempest相关的测试,但是源代码有些地方看不太明白。

比如tempest目录下的test.py中的setup_credentials方法中,有下列语句:

if credentials_type == 'primary':
                    cls.os = cls.manager = cls.os_primary

if credentials_type == 'admin':
                    cls.os_adm = cls.admin_manager = cls.os_admin
                if credentials_type == 'alt':
                    cls.alt_manager = cls.os_alt

===========

这种两个等号连接三个变量是赋值吗,如果是怎么理解呢?比如第一句,cls.os = cls.manager = cls.os_primary,这三个变量那个是已知值呢?我查了整个tempest目录,都没找到其它地方有他们,而且我试着用三个变量的表达式,比如 a = b = c,这是c必须提前有值,否则就会报错。

还有,下边的那几个变量都是从什么地方赋值的呢,我搜了一遍,没有发现申明alt_manager与os_alt的地方。


非常纠结,请教大家

加载中
0
Fly_f
Fly_f
你运行调试看看不是就知道了。
weirise
weirise
的时候,提示没有cmd属性,可是明明有的啊!如果通过run as unittest来运行倒没什么问题?这是为啥呢?
weirise
weirise
谢谢!我单独run as python运行这个test、
0
cxuc
cxuc
我大致看来一下test.py前后的代码,在你写的代码之前有一行是setattr(cls,'os_%s' % credentials_type,manager),你应该知道python setattr函数,如果credentials_type==primary,manager复制给cls.os_primary,那么这个类就有这个参数存在,所以 cls.os = cls.manager = cls.os_primary不会报错,类有 os_primary这个参数存在,你应该把for循环看完
0
weirise
weirise

引用来自“kimjaejoong”的评论

我大致看来一下test.py前后的代码,在你写的代码之前有一行是setattr(cls,'os_%s' % credentials_type,manager),你应该知道python setattr函数,如果credentials_type==primary,manager复制给cls.os_primary,那么这个类就有这个参数存在,所以 cls.os = cls.manager = cls.os_primary不会报错,类有 os_primary这个参数存在,你应该把for循环看完

非常感谢您的回答。

 我看了一下,程序本意是想通过setattr的方式,给class增加os_admin,os_alt,os_primary三个属性,value都是manager,这样就解释了这种三个变量赋值时,最后边的变量必须申明的疑惑,即声明了os_admin,os_primary,os_alt,所以cls.os = cls.manager = cls.os_primary,cls.os_adm = cls.admin_manager = cls.os_admin这样的写法不会报错(不知道理解的对不对:(  )。

但是我搜了整个目录,好像没有地方再提到这三个类属性(os_admin,os_primary,os_alt),倒是有的地方有os_adm,manager这样的声明,既然这样,干嘛要写成cls.os_adm = cls.admin_manager = cls.os_admin,直接写成os_adm或者os.os不更清楚么?

期盼您的回答!

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部