Negroup - wrote: > Hi. > Suppose that I need to use in my project a module that belongs to > another project, because - with some tuning - it can fit my needings. > > module.py > limit = 30 > > class A: > def __init__(self): > self.num = 20 > def info(self): > return limit > def inc_num(self): > self.num += 1 > def check(self): > return self.num > limit > > Now suppose that I'd like to have the same class A in my module, but > also I want that the initial value of limit is set to 25. > > >>>>limit = 25 >>>>from module import A >>>>a = A() >>>>a.info() > > 30
Obviously this doesn't do what you want. The problem is that class A is seeing the limit defined in it's module. 'global' variables in Python actually have module scope, there is no truly global scope in Python (OK, there's the __builtin__ scope, but this is a beginner's list!) IMO the best solution is to pass limit as a parameter to A's constructor and save it as an instance attribute: class A: def __init__(self, limit): self.limit = limit self.num = 20 def info(self): return self.limit def inc_num(self): self.num += 1 def check(self): return self.num > self.limit Now you can create whatever kind of A's you want: from module import A a = A(30) etc. Another way to do this is to make limit a class attribute. Then you can change it in subclasses: class A: limit = 25 def __init__(self): self.num = 20 def info(self): return self.limit def inc_num(self): self.num += 1 def check(self): return self.num > self.limit class B(A): limit = 30 a = A() a.info() --> 25 b = B() b.info() --> 30 Kent Note you still refer to self.limit so the value of limit in the current class will be found. > where is the value 30 coming from? from module.limit. Kent -- http://www.kentsjohnson.com _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor