Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python在初始化时声明对象函数_Python - Fatal编程技术网

Python在初始化时声明对象函数

Python在初始化时声明对象函数,python,Python,假设我有一个传递了一组选项的类 例如: class Thing(object): def __init__(self, options): self.name = options['name'] if options['material'] == 'organic': self.living = options['living'] if self.living: se

假设我有一个传递了一组选项的类

例如:

class Thing(object): 
    def __init__(self, options): 
        self.name = options['name']
        if options['material'] == 'organic': 
            self.living = options['living'] 
            if self.living: 
                self.kingdom = options['kingdom'] 
        else:
            self.material = options['material'] 
因此,如果它是物质和有机的,它将有一个额外的选项,指定它是否存在,如果它存在,它还将有一个王国等等

假设我想在
类Thing
中定义一个函数,例如:

def belongToKingdom(self): 
    print self.kingdom

但我只希望在
\uuuu init\uuuu
中定义这样一个函数,如果在选项中传递了kingdom,则忽略它。正确的方法是什么

有一个子类
类LivingThing(Thing):
?是的,我知道,它只是一个简化的例子,实际的用例有点不同,因为有一组函数是由成对值数组动态生成的。所以我不能只为每一个可能的对的组合创建子类,我实际上需要一个标准的原型函数,并用一些由值对决定的变量生成它。这可能适用于不同的问题,但是,假设我不知道要定义的函数将被调用,有没有办法对函数名进行str格式化?也就是说,self.belongTo{0}.format(options['kingdom'])@user3467349的工作等价物我真的搞不懂你在问什么,但听起来你好像在试图把有意义的数据放在变量名中。不要那样做!只需构建一个选项列表,这样
Thing().options
就会返回
{'living':True,'kingdom':“Animal”,…}
并测试it@user3467349但当然,事实上,有一种方法可以做你想做的事。与其操纵
self
,不如操纵
self.\uuu dict\uuu
。然后可以使用字符串而不是变量名。例如:
self.[belongTo{}.format('kingdom')]=lambda self:print(self.kingdom)
works(它比sin更丑陋)是的,我刚刚想到了。我也可以直接制作一本新字典,即self.printMyAttribute={},然后添加到字典中,使它看起来像{'kingdom':}等等。你有什么理由不鼓励这样的事情吗?@AdamSmith这行不通
belongToKingdom
是一个函数,与方法不同。然后需要进行赋值
self.belongToKingdom=MethodType(belongToKingdom,self)
class Thing(object):
    def __init__(self, **options):
        if options.get('living',None):
            def belongToKingdom(self):
                print(self.kingdom)
            self.kingdom = options['kingdom']
            self.belongToKingdom = belongToKingdom