【问题标题】:Python: getting class type within classPython:在类中获取类类型
【发布时间】:2021-10-15 10:35:46
【问题描述】:

我有一个 python 类,我想在类中为自己进行类型检查。例如:使用python类'A':

class A:

    def __init__(self, param1, ...):
       self._param1 = None
       self.param1= param1
    
     
    @property
    def param1(self):
        return self._param1

    
    @param1.setter
    @type_check_property(******)
    def param1(self, param1):
        self._param1 = param1

我定义了我的第一个类并希望将其传递给第二个类并对其进行类型检查以确保它是类型 (A)。

class1 = A(....)
class2 = A(param1=class1, ...)

我有一个已经可以做到这一点的装饰器,但我需要通过(A 而不是 ****** 在第一块代码中)但我无法获得A 因为A尚未实例化。

如何在类本身中获取类的类型? 谢谢!

【问题讨论】:

  • 真的需要花更多的精力来格式化你的代码。请注意,您应该使用常规的 4 个空格进行 Python 缩进
  • 对不起,我是菜鸟。会努力做得更好!感谢您的解决方案!

标签: python python-decorators


【解决方案1】:

您必须在类定义之后执行此操作,在类定义内部,类对象还不存在。所以:

class A:
    def __init__(self, param1):
        self.param1= param1
    
    @property
    def param1(self):
        return self._param1
    
    def _param1_setter(self, param1):
        self._param1 = param1
    
A.param1 = A.param1.setter(type_check_property(A)(A._param1_setter))

这里要理解的关键,

@foo
@bar
def baz():
   pass

相当于:

def baz():
   pass
baz = foo(bar(baz))

还有:

@bar(arg)
def baz():
    pass

相当于:

def baz():
    pass
baz = bar(arg)(baz)

所以把它们放在一起:

@foo
@bar(arg)
def baz():
    pass

相当于:

def baz():
    pass
baz = foo(bar(arg)(baz))

【讨论】:

    猜你喜欢
    • 2013-11-29
    • 2019-05-29
    • 2012-03-20
    • 1970-01-01
    • 2017-03-05
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    • 2014-04-14
    相关资源
    最近更新 更多