- aliasing
'''
##################
'''
#
# class Animal:
#     def __init__(self, favourite_food):
#         self.favourite_food = favourite_food
#
#
# class Zoo:
#     def new_animal(self, favourite_food):
#         return Animal(favourite_food)
#
#     def feed(self, food, animal):
#         print("Im giving {} to {}.".format(food, animal))
#
#     def get_favourite_food(self, animal):
#         return animal.favourite_food
#
#
# z1 = Zoo()
# animal = z1.new_animal('beef')
# food = z1.get_favourite_food(animal)
# z1.feed(food, animal)
'''
Previously, to use these keywords in Robot Framework, you would have to do
this:
    ${animal}=    New animal    beef
    ${food}=      Get favourite food
    Feed          ${food}       ${animal}
After the aforementioned modifications, these keywords can be used in the
following way:
    New animal    beef                    Lion
    ${food}=      Get favourite food      Lion
    Feed          ${food}                 Lion
'''
'''
##################
'''
# from taf.internal.aliasing import aliasing_scope
from aliasing import aliasing_scope
import logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s:%(message)s')
logger = logging.getLogger(__name__)
class Animal:
    def __init__(self, favourite_food):
        self.favourite_food = favourite_food
class Man:
    def __init__(self, favourite_food):
        self.favourite_food = favourite_food
class Zoo:
    # lookup_handler, store = aliasing_scope()
    lookup_handler, store = aliasing_scope('animal', Animal, 'test_aliasing_scope')
    # lookup_handler, store = aliasing_scope('animal', Animal)
    # lookup_handler_man, store_man = aliasing_scope('man', Man, 'test2')
    print('lookup_handler: ', lookup_handler.__dict__)
    print('store         : ', store.__dict__)
    def new_animal(self, favourite_food, name=None):
        new_animal = Animal(favourite_food)
        self.store.add(new_animal, name)
        print('def new_animal: ',self.store.__dict__)
        return new_animal
    # def new_man(self, favourite_food, name=None):
    #     new_man = Man(favourite_food)
    #     self.store_man.add(new_man, name)
    #     print('def new_man: ',self.store.__dict__)
    #     return new_man
    @lookup_handler.implicit_lookup('animal')
    def feed(self, food, animal):
        print("Im giving {} to {}.".format(food, animal))
    # @lookup_handler_man.implicit_lookup
    # def eat(self, food, man):
    #     print("{} is eating {} .".format(man, food))
    # @lookup_handler.implicit_lookup('animal')  # 前面lookup_handler, store = aliasing_scope(),这里需要指定 animal
    # @lookup_handler.implicit_lookup('animal222') # 默认就这样用
    @lookup_handler.implicit_lookup('animal222')
    def get_favourite_food(self, animal222):
        return animal222.favourite_food
z1 = Zoo()
# animal
# Lion = z1.new_animal('beef')  # 主要是替换这种用法,Lion不用对象,可以用字符串
# z1.new_animal('beef', 'Lion')
# food = z1.get_favourite_food('Lion')
# z1.feed(food, 'Lion')
# 原始用法
# print('@@')
# Lion2 = z1.new_animal('beef')
# food2 = z1.get_favourite_food(Lion2)
# z1.feed(food2,Lion2)
# print('@@')
# default
# z1.new_animal('food')
# food = z1.get_favourite_food('amize_default')
# z1.feed(food,'amize_default')
# man
# z1.new_man('rice', 'Jhon')
# z1.eat('rice', 'Jhon')