我有两节课。在一个类中,我有很多基于变量运行的方法。
在第二个类中,我想定义第二个变量,当此变量为true时,第一个类的方法运行。
但是,我不知道如何写这个。
我想知道如何定义新变量(在第二个类中)并确保第二个类中的此变量替换第一个类中的变量(当此变量为true时)。
例如:
class One():
def MethodOne( self ):
if self.this.VariableOne:
do something
do something else
do another thing
return something
class Two(One):
def MethodOne( self ):
if self.this.VariableTwo:
run all the other code in MethodOne(), (if the variable is VariableTwo, but replacing VariableOne.
我不确定这里的最佳方法。
但我仍然希望MethodOne方法(从不同的类)运行,但使用不同的变量。
如果我正确理解你的问题,我认为最简单的方法就是在One上创建一个类变量,只需将其设置为false即可。就像是:
class One():
force = False
def MethodOne( self ):
if self.this.VariableOne or self.force:
do something
do something else
do another thing
return something
class Two(One):
force = True
我认为最好的方法是在所有函数中使用装饰器,在元类中实现(来自Attaching a decorator to all functions within a class):
class TheMeta(type):
def __new__(cls, name, bases, namespace, **kwds):
# my_decorator = cls.my_decorator (if the decorator is a classmethod)
namespace = {k: v if k.startswith('__') else Variablecheck(v) for k, v in namespace.items()}
return type.__new__(cls, name, bases, namespace)
装饰者:
def Variablecheck(func):
@functools.wraps(func)
def wrapper_Variablecheck(*args, **kwargs):
# if inspect.isclass(type(args[0])):
if args[0].this.VariableTwo:
return func(*args, **kwargs)
然后,你尝试用:
class One(metaclass=TheMeta):
# rest of the definition
否则,如果要保持原始类的原样,也可以将元类应用于继承类。