Bottom Page

Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
 Have two class instances affect one another
#1
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 Big Grin
Quote
#2
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()
5
You 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()
5
I'd recommend the first, though, unless you have a good (and obvious) reason why all instances should have the same values.
Quote
#3
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
Quote
#4
I actually do need all instances to have the same values so thanks a lot nilamo :)
Quote

Top Page

Possibly Related Threads...
Thread Author Replies Views Last Post
  Class Instances overriding class members and attributes. Leaf 7 1,525 Nov-29-2017, 06:08 AM
Last Post: Leaf
  Create class instances from list of strings pythonck 1 1,378 Sep-18-2017, 06:13 PM
Last Post: ichabod801
  List-Elements as instances of a class BigMan 3 1,529 Mar-25-2017, 06:55 PM
Last Post: nilamo

Forum Jump:


Users browsing this thread: 1 Guest(s)