Have two class instances affect one another - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: Have two class instances affect one another (/thread-19393.html) |
Have two class instances affect one another - The_Zookinator - Jun-26-2019 Hey everybody, newbe here. I'm trying out classes and I don't know how to get the desired results: class name(): def __init__(self,name): self.name = name self.m = 0 def one(self): if self.name == 'Jack': self.m = self.m + 5 print(self.m) def two(self): if self.m > 0: print(self.m) else: print("no") S = name('Jack') P = name('Tom')I want to start with S.one() and then use P.two() to get 5 but I always get 'no' instead. Any feedback is welcome and appriciated RE: Have two class instances affect one another - nilamo - Jun-26-2019 So depending on exactly what you want, there's several ways to do it. The easiest would be to use a shared object to store the dependent data: >>> class DataBag: ... def __init__(self): ... self.m = 0 ... >>> class Foo: ... def __init__(self, name, data): ... self.name = name ... self.data = data ... def one(self): ... if self.name == "Jack": ... self.data.m += 5 ... def two(self): ... if self.data.m > 0: ... print(self.data.m) ... else: ... print("no") ... >>> bag = DataBag() >>> s = Foo("Jack", bag) >>> p = Foo("Tom", bag) >>> s.one() >>> p.two() 5You could also use a class member instead of an instance variable, if you want to effect ALL instances of the class, not just these two: >>> class Bar: ... m = 0 ... def __init__(self, name): ... self.name = name ... def one(self): ... if self.name == "Jack": ... Bar.m += 5 ... def two(self): ... if Bar.m > 0: ... print(Bar.m) ... else: ... print("no") ... >>> a = Bar("Jack") >>> b = Bar("Fred") >>> b.two() no >>> a.one() >>> b.two() 5I'd recommend the first, though, unless you have a good (and obvious) reason why all instances should have the same values. RE: Have two class instances affect one another - avorane - Jun-26-2019 Hello, I think it's right like result. You set name of S to Jack and call one on this. So attribut m equal 5. You set name of P with other value. So attribut m equal 0. And you call two on P. It returns 'no' if m equal 0. This is the case. Sorry, i have read the subject too fast. I don't know if can it a solution, but you have the design pattern singleton for this. You can found this on the web for python RE: Have two class instances affect one another - The_Zookinator - Jun-26-2019 I actually do need all instances to have the same values so thanks a lot nilamo :) |