Python Forum
Have two class instances affect one another
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
Reply
#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.
Reply
#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
Reply
#4
I actually do need all instances to have the same values so thanks a lot nilamo :)
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
Question [solved] Classes, assign an attributes to a class not to instances.. SpongeB0B 4 891 May-20-2023, 04:08 PM
Last Post: SpongeB0B
  How to create a varying qty of instances of a Class and name them? KM007 2 2,002 May-29-2020, 12:30 PM
Last Post: KM007
  Class Instances called in the wrong order IanIous 4 2,776 Mar-06-2020, 02:16 PM
Last Post: IanIous
  How to access class variable? instances vs class drSlump 5 3,283 Dec-11-2019, 06:26 PM
Last Post: Gribouillis
  Class Instances overriding class members and attributes. Leaf 7 6,856 Nov-29-2017, 06:08 AM
Last Post: Leaf
  Create class instances from list of strings pythonck 1 3,575 Sep-18-2017, 06:13 PM
Last Post: ichabod801
  List-Elements as instances of a class BigMan 3 4,254 Mar-25-2017, 06:55 PM
Last Post: nilamo

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020