Лекция 2
Задание
l1=[1,2,3]
l2=[3,4]
операция плюс определена, а вот операции - нет. Давайте ее определим так, чтобы
l1 - l2 = [1,2] - общий элемент 3 исчез.
Подсказка: унаследуйтесь от class A(list)
Вспомогательный материал к лекции 2
1.
#!/usr/bin/env python
	class Simple(object):
	    a = 0
	    def __init__(self, a):  
	        print "when constructor starts a=%d" % self.a
	        self.a = a
	    def get_a(self):
	        return self.a
	    def set_a(self, new_a):
	        self.a = new_a
	class DSimple(object):
	    def __del__(self):
	        print "Desctructor here"
	if __name__ == "__main__":
	    print "Constructor examples"
	    s = Simple(10)
	    print "a=%d" % s.get_a()
	    s.set_a(15)
	    print "now a=%d" % s.get_a()
	    print "Destructor examples"
	    d = DSimple()
	    del d
2.
#!/usr/bin/env python
		# -*- coding: utf-8 -*-
	
		class A(object):
	
		    def __init__(self):
	
		        print u"Конструктор класса A"
	
		    def say_hello(self):
	
		        print u"Hello from %s" % self.__class__.__name__
	
		    def do_something(self, val):
	
		        print u"Сотворим какое-нибудь добро с %s в A" % val
	
		class B(A):
	
		    def __init__(self):
	
		        print u"Конструктор класса B"
	
		        super(B, self).__init__()
	
		    def do_something(self, val):
	
		        super(B,self).do_something(val)
	
		        print u"Треш и угар с %s в B" % val
	
		if __name__ == "__main__":
	
		    a = A()
	
		    print "-"*20
	
		    b = B()
	
		    print "-"*20
	
		    a.say_hello()
	
		    b.say_hello()
	
		    print "-"*20
	
		    b.do_something(None)
	3.
#!/usr/bin/env python
			class Cow(object):
		
			    height = 150
		
			    weight = 500
		
			    position = 0
		
			    def say_moo(self):
		
			        print "Mooo"
		
			    def walk(self):
		
			        position += 10              
		
			if __name__ == "__main__":
		
			    cow  =  Cow()
		
			    methods = [method for method in dir(cow) if callable(getattr(cow, method)) and 
		
			                                        (not method.startswith('__'))]
		
			    print "\n".join(methods)
		4.
#!/usr/bin/env python
				class Counter(object):
			
				    def __init__(self, start=1, stop=10):
			
				       self.current = start
			
				       self.stop = stop
			
				    def __iter__(self):
			
				        return self
			
				    def next(self):
			
				        if self.current > self.stop:
			
				            raise StopIteration
			
				        self.current += 1
			
				        return self.current - 1
			
				if __name__ == "__main__":
			
				    counter = Counter(3,18)
			
				    for c in counter: print c
			5.
#!/usr/bin/env python
					class A(object):
				
					    def __init__(self):
				
					        print u"Constructor A"
				
					class B(object):
				
					    def __init__(self):
				
					        print u"Constructor B"
				
					    def __str__(self):
				
					        return "B!"
				
					class C(A,B):
				
					    def __init__(self):
				
					        print u"Constructor C"
				
					        super(C, self).__init__()
				
					if __name__ == "__main__":
				
					    c = C()
				
					    print c
				6.
#!/usr/bin/env python
						import sys
					
						class Monkey(object):
					
						    def __init__(self, name='ChiChiChi'):
					
						        self.name = name
					
						if __name__ == "__main__":
					
						    def eat(self, bananas=0):
					
						        if bananas < 1:
					
						            raise RuntimeError("Monkey died")
					
						        print "Monkey %s got %d bananas " % (self.name, bananas)
					
						    Monkey.eat = eat
					
						    m = Monkey("ChaChaCha")
					
						    m.eat(2)
					
						    m.say_hello = lambda: sys.stdout.write("Hello\n");
					
						    m.say_hello()
					7.
#!/usr/bin/env python
							class A(object):
						
							    pass
						
							class B(object):
						
							    def __init__(self, a, b):
						
							        self.a = a
						
							        self.b = b
						
							    def __repr__(self):
						
							        return "B(a=%r,b=%r)" % (self.a, self.b)
						
							    def __str__(self):
						
							        return "I'm B"
						
							    def __eq__(self, other):
						
							        if self.a == other.a and self.b == other.b:
						
							            return True
						
							        return False
						
							if __name__ == "__main__":
						
							    a = A()
						
							    print repr(a)
						
							    print str(a)
						
							    print "-" *20
						
							    b1 = B(10,20)
						
							    print "str(b1)= %s" % b1
						
							    b2 = eval(repr(b1))
						
							    print "b1=%r id=%r, b2=%r id=%r" % (b1, id(b1), b2, id(b2))
						
							    print "b1 == b2: %s" % (b1==b2)
						
							    b2.a = 11
						
							    print "b1 == b2: %s" % (b1==b2)
						8.
#!/usr/bin/env python
								# -*- coding: utf-8 -*-
							
								class ControlledExecution(object):
							
								    def __enter__(self):
							
								        return "hehe"
							
								    def __exit__(self, type, value, traceback):
							
								        print "I' m exit method!"
							
								if __name__ == "__main__":
							
								    with ControlledExecution() as a:
							
								        raise RuntimeError(u"Беда беда!")