因此,我试图创建一个具有初始化方法的类,该方法需要获取被创建对象的类型,以便正确设置init参数的默认值。
举一个具体的代码例子,假设我有如下的类:
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说“自我”没有定义
,我可以理解,因为自我
尚未实例化。所以我的问题是如何正确实现它?我不想“硬编码”类类型,因为这个类的子类可能有自己的some_class_variable
和some_other_class_variable
值,我希望这些子类使用与其类型相对应的类变量。
我的解决方案需要在Python 3.6中工作
类名还没有绑定,因为这个类还没有初始化。请看这个更深入解释这个问题的答案。
解决这个问题的一种方法,虽然不是很好,但是可以为变量创建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的“类型化”来验证这些属性的类型。
我认为你应该把它放在身体里,而不是参数。
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)
问题内容: 我有一个需要将对象数组存储在变量中的要求。对象是不同类型的。请参考以下示例: 注意第二个元素是字符串本身的数组。经过研究,我想将其存储为以下接口类型: 尽管如此,我还是遇到了一些无法找到的编译错误。 问题答案: 您要的是可能的- 游乐场链接: 但是您可能不想这样做。您正在与类型系统进行斗争,如果您这样做,我会质疑您为什么要使用Go。考虑利用类型系统- 游乐场链接:
我试图创建一个由子类定义的对象数组(我认为这是正确的术语)。我可以看到这个问题反复出现,但实现仍然存在问题。 我的代码 给出错误 线程“main”java.lang.NullPointerException中出现异常。 为了使其合理化,我将其分解为最简单的术语: 这似乎奏效了。我只是看不出我的两个例子有什么不同。我知道我的第一个没有意义,但是MyClass最终会包含更多的数据。) 我很肯定这个问题
我试图为Java中的abject数组获取用户输入。但它工作不正常。我创建了第一个类并声明了所有属性,还创建了构造函数、geter和seter。但是当我在数组中保存对象时,它不能正常工作
本文向大家介绍如何在Python中创建类对象?,包括了如何在Python中创建类对象?的使用技巧和注意事项,需要的朋友参考一下 使用该类的构造函数创建一个类对象。然后将该对象称为类的实例。类实例化使用函数表示法。 在下面的代码中,我们定义一个类并创建了相同类的实例,如下所示
本文向大家介绍如何在JavaScript中获取对象的值?,包括了如何在JavaScript中获取对象的值?的使用技巧和注意事项,需要的朋友参考一下 有一些方法,例如Object.values()来获取对象的值。但是,通过这些方法,找出值的过程很漫长。为了缓解这个,Underscore.js的JavaScript库已经提供了一种方法称为_.values() 。此方法不需要for循环即可执行值。这是执
问题内容: 看来在PHP对象中是通过引用传递的。甚至赋值运算符似乎也没有创建对象的副本。 这是一个简单的人为证明: 在这两种印刷情况下,我都会得到“之后”的印象 那么,如何通过值而不是通过引用将 $ a 传递给 set_b() ? 问题答案: 在PHP 5+中,对象是通过引用传递的。在PHP 4中,它们是按值传递的(这就是为什么它具有运行时按引用传递(已弃用)的原因)。 您可以在PHP5中使用“克