在python中有条件地更改类实例属性
我是python的新手。我有一个类X继承了类Y。在类X中,属性b始终 保持不变,永不改变,但在Y类中,当给定 条件满足在python中有条件地更改类实例属性,python,class,conditional-statements,instance,Python,Class,Conditional Statements,Instance,我是python的新手。我有一个类X继承了类Y。在类X中,属性b始终 保持不变,永不改变,但在Y类中,当给定 条件满足 class X(object): def __init__(self,others_attributes): self.b = 1 self.others_attributes = others_attributes class Y(X): def __init__(self,others_attributes,varia
class X(object):
def __init__(self,others_attributes):
self.b = 1
self.others_attributes = others_attributes
class Y(X):
def __init__(self,others_attributes,variable_condition):
super(X, self).__init__(others_attributes)
self.b += 1
如何确保类Y的任何实例的每个模拟步骤都具有属性b的特定值?我应该创建一个@classmethod还是一个类似于下面的@properties?
还是有更好的策略
if variable_condition:
self.b = self.b + 1
else:
self.b = self.b
return self.b
不确定您询问的是维护类级状态还是实例级状态 如果您询问如何更改类级别状态,则只需将
b
存储为类变量:
some_condition = True
class X(object):
count = 0
class Y(X):
def __init__(self):
if some_condition:
Y.count += 1
instances = [
X(),
Y(),
Y(),
X(),
X(),
Y()
]
print('\n'.join([str(i.count) for i in instances]))
如果只想更改Y
的某些实例的b
,则可以执行以下操作:
class X(object):
def __init__(self):
self.b = 0
class Y(X):
def __init__(self, some_condition):
super(Y, self).__init__()
if some_condition:
self.b += 1 # or set it to whatever else you want
else:
self.b = -1
instances = [
X(),
Y(True),
Y(False),
X(),
X(),
Y(True)
]
print('\n'.join([str(i.b) for i in instances]))
@金库普斯
考虑如下
some_condition = True
class X(object):
def __init__(self,a,c):
self.b = 1
self.a = a
self.c = c
class Y(X):
def __init__(self,a,c):
super(X,self).__init__(a,c)
def __init__(self, some_condition):
super(Y, self).__init__()
if some_condition:
self.b += 1 # or set it to whatever else you want
else:
self.b = -1
文件“C:\Users\Alexandre\Documents\PYTHON\Paper\u ICESP\teste.py”,第248行,在ABM中
细胞。myfun(a,c)
文件“C:\Users\myname\firstfolder\secondfolder\thirdfolder\myscript.py”,第132行,在myfun中
c=Y(a,c)
文件“C:\Users\myname\firstfolder\secondfolder\thirdfolder\myscript.py”,第154行,位于init
超级(X,self)。init(a,c)
TypeError:object.init()只接受一个参数(要初始化的实例)
我怀疑在子类Y中创建超类Y会干扰Y。你认为呢?你不需要
self.b=self.b
。谢谢@Barmar。你说得对!谢谢@kingkupps我只想为Y的某些实例更改b。