如何获取在 __init__ 参数中创建的对象的 class
How to get class of object being created in __init__ parameters
所以我正在尝试创建一个 class 初始化方法,该方法需要获取正在创建的对象的类型,以便正确设置初始化参数的默认值。
举一个具体的代码示例,假设我有以下 class:
def __init__(self, foo, bar=type(self).some_class_variable, ham=type(self).some_other_class_variable):
self.foo = foo
self.bar = bar
self.ham = self.some_function(ham)
这是我正在寻找的功能,但我的 IDE 说的是 "self" is not defined
我可以理解,因为 self
尚未实例化。所以我的问题是我将如何正确实施呢?我不想在我当前拥有 type(self)
的地方“硬编码”class 类型,因为此 class 的子 class 可能有自己的 [=16= 值] 和 some_other_class_variable
我希望那些子 classes 使用与其类型对应的 class 变量。
我的解决方案需要在 Python 3.6 和 Python 3.7 中工作,但如果可能的话,我真的更希望找到一个适用于 Python 3.6 及更高版本的所有版本的解决方案。
我认为你应该把它放在正文中,而不是参数中。
def __init__(self, foo):
self.foo = foo
self.bar = type(self).some_class_variable
self.ham = self.some_function(type(self).some_other_class_variable)
编辑:
如果值是默认值,您可以这样做:
default_value = 'default pls'
def __init__(self, foo, bar=default_value, ham=default_value):
self.foo = foo
if default_value == bar:
self.bar = type(self).some_class_variable
if default_value == ham:
self.ham = self.some_function(type(self).some_other_class_variable)
class 名称尚未绑定,因为此时 class 尚未初始化。请参阅此 answer,其中更深入地解释了这一点。
解决这个问题的一种方法是为变量创建 setter 方法,并在实例初始化后设置它们,如下所示:
class Example:
def __init__(self, foo):
self.foo = foo
self.bar = None
self.ham = None
def set_bar(self, bar):
self.bar = bar
def set_ham(self, ham):
self.ham = ham
您可以更进一步,使用简单的 if 语句或通过 python 'typing'.
来验证这些属性的类型
所以我正在尝试创建一个 class 初始化方法,该方法需要获取正在创建的对象的类型,以便正确设置初始化参数的默认值。
举一个具体的代码示例,假设我有以下 class:
def __init__(self, foo, bar=type(self).some_class_variable, ham=type(self).some_other_class_variable):
self.foo = foo
self.bar = bar
self.ham = self.some_function(ham)
这是我正在寻找的功能,但我的 IDE 说的是 "self" is not defined
我可以理解,因为 self
尚未实例化。所以我的问题是我将如何正确实施呢?我不想在我当前拥有 type(self)
的地方“硬编码”class 类型,因为此 class 的子 class 可能有自己的 [=16= 值] 和 some_other_class_variable
我希望那些子 classes 使用与其类型对应的 class 变量。
我的解决方案需要在 Python 3.6 和 Python 3.7 中工作,但如果可能的话,我真的更希望找到一个适用于 Python 3.6 及更高版本的所有版本的解决方案。
我认为你应该把它放在正文中,而不是参数中。
def __init__(self, foo):
self.foo = foo
self.bar = type(self).some_class_variable
self.ham = self.some_function(type(self).some_other_class_variable)
编辑: 如果值是默认值,您可以这样做:
default_value = 'default pls'
def __init__(self, foo, bar=default_value, ham=default_value):
self.foo = foo
if default_value == bar:
self.bar = type(self).some_class_variable
if default_value == ham:
self.ham = self.some_function(type(self).some_other_class_variable)
class 名称尚未绑定,因为此时 class 尚未初始化。请参阅此 answer,其中更深入地解释了这一点。
解决这个问题的一种方法是为变量创建 setter 方法,并在实例初始化后设置它们,如下所示:
class Example:
def __init__(self, foo):
self.foo = foo
self.bar = None
self.ham = None
def set_bar(self, bar):
self.bar = bar
def set_ham(self, ham):
self.ham = ham
您可以更进一步,使用简单的 if 语句或通过 python 'typing'.
来验证这些属性的类型