8

在您发表这篇文章之前,在我能找到的任何地方都没有问过它。

我正在使用检查列表是否存在

if 'self.locList' in locals():
    print 'it exists'

但它不起作用。它从不认为它存在。这一定是因为我正在使用继承并在self.其他地方引用它,我不明白发生了什么。

任何人都可以阐明一下吗?

这是完整的代码:

import maya.cmds as cmds

class primWingS():
    def __init__(self):
        pass
    def setupWing(self, *args):
        pass
    def createLocs(self, list):
        for i in range(list):
    if 'self.locList' in locals():
        print 'it exists'
            else:
                self.locList = []
            loc = cmds.spaceLocator(n = self.lName('dummyLocator' + str(i + 1) + '_LOC'))
            self.locList.append(loc)
            print self.locList


p = primWingS()
4

3 回答 3

20

我想你想要hasattr(self,'locList')

虽然,您通常最好尝试使用属性并捕获AttributeError如果它不存在则引发的属性:

try:
    print self.locList
except AttributeError:
    self.locList = "Initialized value"
于 2013-02-25T02:30:07.797 回答
8

换个角度回答一下。Try ... catchgetattr或者dir如果您只想让代码正常工作,那就是要走的路。

该调用locals()返回本地范围的字典。那就是它包括self. 但是,您要的是self( self.locList) 的孩子。孩子根本不在字典里。与您正在做的最接近的事情是:

if 'locList' in dir(self):
    print 'it exists'

函数dir是查询对象项的通用方法。但正如其他帖子中所指出的,从速度的角度查询对象的属性没有多大意义。

于 2013-02-25T13:01:15.537 回答
1

您可以使用带有默认值的 try/except 或 getattr,但这些东西对您的代码没有意义。__init__ 方法用于初始化对象:

def __init__(self):
    self.locList = []

让 locList 不存在是没有意义的。零长度列表是没有位置的对象。

于 2013-02-25T02:38:28.433 回答