Advertisement
oleh_korkh

Untitled

Jan 18th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.86 KB | None | 0 0
  1. import datetime
  2.  
  3.  
  4. class Crowd:
  5.     """ kjdsldk jslkjgs lkjgds
  6.    """
  7.     def __init__(self, name, people, aggresiveness=0):
  8.         self.name = name
  9.         self.people = people
  10.         self.aggresiveness = aggresiveness
  11.  
  12.     def hire(self, *persons):
  13.         self.people += persons
  14.  
  15.     def get_names(self):
  16.         return [x.full_name for x in self.people]
  17.  
  18.     def inc_aggresiveness(self, value=1):
  19.         self.aggresiveness += value
  20.  
  21.     def __repr__(self):
  22.         return 'Crowd(%s, size=%d)' % (
  23.             self.name, len(self.people))
  24.  
  25.     def __str__(self):
  26.         if self.name:
  27.             return self.name + ': ' + ', '.join(self.get_names()) + ' AGG:%s' % self.aggresiveness
  28.         else:
  29.             return ', '.join(self.get_names()) + ' AGG:%s' % self.aggresiveness
  30.  
  31.     def __add__(self, other):
  32.         import copy
  33.         t = copy.deepcopy(self)
  34.         if isinstance(other, Crowd):
  35.             t.people += other.people
  36.             return t
  37.  
  38.         t.hire(other)
  39.         return t
  40.  
  41.     def __iter__(self):
  42.         self._i = 0
  43.         return self
  44.  
  45.     def __next__(self):
  46.         if self._i < len(self.people):
  47.             t = self._i
  48.             self._i += 1
  49.             return self.people[t]
  50.         else:
  51.             raise StopIteration
  52.  
  53.  
  54. class Person:
  55.     def __init__(self, first_name, last_name, birth_date):
  56.         self.first_name = first_name
  57.         self.last_name = last_name
  58.         self.birth_date = birth_date
  59.  
  60.     def age(self):
  61.         result = getattr(self, '_age', None)
  62.         if not result:
  63.             result = datetime.date.today().year - \
  64.                 self.birth_date.year
  65.             self._age = result
  66.         return result
  67.  
  68.     @property
  69.     def full_name(self):
  70.         return self.first_name + ' ' + self.last_name
  71.  
  72.     @full_name.setter
  73.     def full_name(self, full_name):
  74.         self.first_name, self.last_name = \
  75.             tuple(full_name.split())
  76.  
  77.     def __repr__(self):
  78.         return 'Person(%s, %s, %s)' % (
  79.             self.first_name, self.last_name,
  80.             self.birth_date,
  81.             )
  82.  
  83.     def __str__(self):
  84.         return '%s is %d years old' % (
  85.             self.full_name,
  86.             self.age(),
  87.         )
  88.  
  89.     def __add__(self, other):
  90.         return Crowd(None, [self, other])
  91.  
  92.  
  93. john = Person('John', 'Doe', datetime.date(year=1985, month=3, day=6))
  94. dave = Person('Dave', 'Jones', datetime.date(year=1989, month=5, day=21))
  95.  
  96. team = Crowd('IT department', [john, dave])
  97.  
  98. jane = Person('Jane', 'Brown', datetime.date(year=1987, month=4, day=17))
  99. # # team.hire(jane)
  100. monica = Person('Monica', 'Geller', datetime.date(year=1981, month=3, day=17))
  101.  
  102. guys = [jane, monica]
  103.  
  104. # for x in guys:
  105. #     team.hire(x)
  106.  
  107. team.hire(*guys)
  108.  
  109. # team1 = Crowd('Support team', [jane, monica], aggresiveness=4)
  110.  
  111. # print(team)
  112.  
  113. for guy in team:
  114.     print(guy)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement