在python中有条件地更改类实例属性

在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

我是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,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。