我需要从嵌套类访问变量。目标是使用棉花糖库创建一个模式。代码如下:
class ParserScheme(Schema):
class Meta:
# Here I meed to access the value of my_variable :
result = func(my_variable)
my_variable = 'foo'
my_parser = ParserScheme()
如果我设法将变量作为外部类(ParserScheme)的类属性传递,那么就很容易将其放入内部类(Meta)。在
^{pr2}$但是我似乎找不到一种动态设置类属性的方法。如果我设置了一个“经典”属性(我指的是类实例的属性,而不是类本身的属性),那么我就不能从内部类访问它。在
我也想过使用全局变量,但这并不能真正满足我。有别的办法吗?在
我对OOP比较陌生,我不太清楚类属性的概念。我担心有一个简单的方法来做到这一点,但我并没有看到我应该集中在我认为这应该工作的方式。。。在
第一个示例中断是因为在执行
class Meta
语句的主体时尚未定义名称my_variable
。在第二个例子也不能工作,因为同样的原因(
my_variable
在执行class ParserScheme
语句时还没有定义),如果是这样的话,在执行class Meta
语句体时它仍然会中断,因为它将作为class ParserScheme
语句体的一部分执行,因此在定义名称ParserScheme
之前,。在这里您需要理解的是,}是可执行语句,当模块第一次导入当前进程时,它们(如果在模块的顶层)是按顺序执行的。在
class
和{class
语句的情况下,首先在专用命名空间中按顺序执行语句体,然后将该命名空间传递给元类构造函数并用于创建类对象的属性(YourClass.__dict__
)。在长话短说:在
class
语句体中,您只需不能引用当前或封闭范围中尚未定义的名称。句号。在这里显而易见的解决方案是在class语句之前定义
my_variable
,但是我假设您希望它更动态?如果是,则必须在函数中定义类:但我不能保证它会在包装盒外工作(甚至根本不工作FWIW)和棉花糖(我从来没有用过,但可能有一些元类的东西发生)。另外,取决于
my_variable
的用途,您可能需要确保没有两个对create_parser_class
的调用具有相同的参数值。在最后一点:你可能在这里有一个XY problem-当有人问如何做一些不明显或不寻常的事情时,有时会出现这种情况。也许你应该编辑你的帖子来解释“背后的问题”——也就是说,你实际上试图用这个“解决方案”解决的问题。在
哦,是的:
在Python中,类也是对象(它们的元类的实例,默认情况下是
type
对象),因此它们有自己的属性。在class
语句的顶层定义的每个名称(使用赋值、def
语句、class
语句或import
语句)都将成为类对象的属性(除非自定义元类在此过程中进行了一些转换)。在类属性也可以从实例访问(除非被eponym实例变量隐藏),并且在所有实例之间共享。在
相关问题 更多 >
编程相关推荐