下面,base_id
而且_id
是一个类变量和所有子类之间共享。
有没有一种方法可以将它们分成每个类?
from itertools import count
class Parent(object):
base_id = 0
_id = count(0)
def __init__(self):
self.id = self.base_id + self._id.next()
class Child1(Parent):
base_id = 100
def __init__(self):
Parent.__init__(self)
print 'Child1:', self.id
class Child2(Parent):
base_id = 200
def __init__(self):
Parent.__init__(self)
print 'Child2:', self.id
c1 = Child1() # 100
c2 = Child2() # 201 <- want this to be 200
c1 = Child1() # 102 <- want this to be 101
c2 = Child2() # 203 <- want this to be 201
如果您不想像falsetru所建议的那样违反DRY原理,则需要使用元类。我本来想写点东西,但是在SO上已经有关于元类的很好的长描述,所以请检查一下。
简而言之,元类使您可以控制子类的创建。
基本上,您需要做的是,在创建的子类后Parent
,将_id
成员添加到新创建的子类中。
问题内容: 假设我有以下python代码: 我想调用external()返回“字符串已被嵌套函数更改!”,但我得到了“”。我得出结论,Python认为该行是对inner()局部的新变量的声明。我的问题是:如何告诉Python应该使用external()字符串?我不能使用关键字,因为字符串不是全局的,它只存在于外部作用域中。有想法吗? 问题答案: 在Python 3.x中,可以使用关键字: 在Pyt
问题内容: 我得到输出b 3。为什么它没有给出b13作为输出。任何人都可以解释一下。 问题答案: 假设Foo类声明如下 变量没有覆盖的概念。他们只是被蒙面。 它正在打印3,因为当您使用超类引用访问变量时,它仅访问在超类中声明的变量。 请记住,超类对子类一无所知。
问题内容: 为什么我们不能覆盖子类中超类的实例变量? 问题答案: 因为如果您更改数据成员的实现,则很有可能会破坏超类(想象将超类的数据成员从float更改为String)。
问题内容: 我有一个Dockerfile,我想使用默认值来配置API。 来自socialengine / nginx-spa ENV API_URL本地主机:6007 因此,当我运行此映像时,我将能够使用以下内容覆盖localhost:6007: 码头工人运行-e API_URL = production.com:6007 ui 这是行不通的,我找不到如何执行此操作的清晰说明。 有什么建议吗? 问
在for循环中,为不同的变量分配一个值。已经赋值的变量将从下一次迭代中获得赋值。最后,两个变量的值相同。该代码用于验证文件中的数据。当我打印这些值时,它会为第一次迭代打印正确的值,但在下一次迭代中,第一次迭代中指定的值会更改。当我在for循环中打印$value3和$value4的值时,它会为$value4显示null,为$value3显示一些值,但在下一次迭代中,$value3的值会被$value
问题内容: 我正在研究JAVA中的重写成员函数,并考虑过尝试使用重写成员变量。 所以,我定义了类 输出为: 我不明白为什么当aRef设置为b时intVal仍然是A类? 问题答案: 当在子类中创建相同名称的变量时,这称为隐藏。现在,生成的子类实际上将同时具有这两个属性。你可以使用或从超类访问一个。变量甚至不必具有相同的类型。它们只是两个共享名称的变量,就像两个重载方法一样。
在Jenkins服务器中,定义了两个全局环境变量。在管理Jenkins中- 名称:MAVEN_HOME Value:/var/HOME/tools/hudson。任务。Maven_Maven安装/maven3.5.2 名称:PATH EXTRA$PATH:/usr/local/bin:$MAVEN\u HOME/bin 我看到PATH EXTRA会将MAVEN PATH添加到PATH环境变量中。这
我想使用xvfb打开浏览器headless,以便使用jmeter进行客户端性能测试。我使用selenium [Junit sampler]来运行测试。如何在jmeter中覆盖显示变量,使其不打开浏览器??