일부 논리에서 매개 변수화 된 개체 특성을 래핑하는 "메서드 팩터 리 함수"를 만드는 것이 유용하다는 것을 알고 있습니다. 예를 들어메서드 클래스 속성을 매개 변수로 사용하는 팩터
:
"""Fishing for answers.
>>> one().number_fisher()
'one fish'
>>> one().colour_fisher()
'red fish'
>>> two().number_fisher()
'two fish'
>>> two().colour_fisher()
'blue fish'
"""
class one(object):
def number(self):
return 'one'
def colour(self):
return 'red'
def _make_fisher(sea):
def fisher(self):
return '{0} fish'.format(getattr(self, sea)())
return fisher
number_fisher = _make_fisher('number')
colour_fisher = _make_fisher('colour')
class two(one):
def number(self):
return 'two'
def colour(self):
return 'blue'
이 문자열로 make_fisher
에 속성을 전달하는 것이 필요하다, 또는이 할 수있는 더 나은 방법이있다?
실제 속성을 전달하고 사용하면 two
의 인스턴스가 여전히 해당 속성 객체에 대한 동일한 참조를 사용하므로 다형성을 깨뜨릴 수 있습니다.
I.E.
diff --git a/fishery.py b/fishery.py
index 840e85d..b98cf72 100644
--- a/fishery.py
+++ b/fishery.py
@@ -4,10 +4,12 @@
'one fish'
>>> one().colour_fisher()
'red fish'
+
+This version does not implement polymorphism, and so this happens:
>>> two().number_fisher()
-'two fish'
+'one fish'
>>> two().colour_fisher()
-'blue fish'
+'red fish'
"""
@@ -18,10 +20,10 @@ class one(object):
return 'red'
def _make_fisher(sea):
def fisher(self):
- return '{0} fish'.format(getattr(self, sea)())
+ return '{0} fish'.format(sea(self))
return fisher
- number_fisher = _make_fisher('number')
- colour_fisher = _make_fisher('colour')
+ number_fisher = _make_fisher(number)
+ colour_fisher = _make_fisher(colour)
class two(one):
def number(self):
속성을 참조하기 위해 문자열을 사용해야하는 것처럼 보이지 않지만이 작업을 수행하는 다른 방법이 없습니다. 거기 있니?