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
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.
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
I actually do need all instances to have the same values so thanks a lot nilamo :)