¿Cuál es la forma más pitónica y correcta de hacer alias de composición?
Aquí hay un escenario hipotético:
class House:
def cleanup(self, arg1, arg2, kwarg1=False):
# do something
class Person:
def __init__(self, house):
self.house = house
# aliases house.cleanup
# 1.
self.cleanup_house = self.house.cleanup
# 2.
def cleanup_house(self, arg1, arg2, kwarg1=False):
return self.house.cleanup(arg1=arg1, arg2=arg2, kwarg1=kwarg1)
AFAIK con el n. ° 1 mis editores probados los entienden tan bien como el n. ° 2: autocompletado, cadenas de documentos, etc.
¿Hay alguna desventaja en el enfoque # 1? ¿Qué camino es más correcto desde el punto de vista de Python?
Para ampliar el método # 1, la variante insinuable y de tipo insinuado sería inmune a todos los problemas señalados en los comentarios:
class House:
def cleanup(self, arg1, arg2, kwarg1=False):
"""clean house is nice to live in!"""
pass
class Person:
def __init__(self, house: House):
self._house = house
# aliases
self.cleanup_house = self.house.cleanup
@property
def house(self):
return self._house
Person.cleanup_househacer. Obtiene la casa asociada con esa persona y la limpia. # 1 limpiará alguna casa, y en algún momento (inicialización), esa casa fue la correcta. No se trata bien con la persona que cambia de casa, o si una persona no tiene casa