프리렉 - FREELEC
http://freelec.co.kr/book/catalogue_view.asp?UID=134
이강성저
class OrderedList(list):
def __init__(self, data=(), key=None):
super().__init__(data)
self.key = key
self.sort(key=self.key)
def append(self, data):
super().append(data)
self.sort(key=self.key)
def extend(self, data):
super().extend(data)
self.sort(key=self.key)
L = OrderedList((3, 10, 2))
print (L)
L.append(5)
print (L)
L.extend( (4,8,20) )
print (L)
C++, C#
두 언어 모두 메서드는 정적으로 처리된다. 만일 가상함수화 하고 싶으면 다음과 같이 virtual 키워드를 사용해야 한다.
public virtual double Area()
{
return x * y;
}
Java
자바에 있어서 모든 비정적인(non-static) 메서드는 모두 '가상 함수'이다. finale 키워드가 붙은 메서드와 상속되지 않는 private 메서드는 비-가상함수이다.
다른 언어는 스스로 검색을 해보기 바란다.
super()는 베이스 클래스를 명시적으로 참조하는 것을 피하게 해준다. 하지만 진정한 장점은 다중 상속일 때 발생한다. 자동으로 베이스 클래스를 결정해주는 super의 기능이 다이아몬드 형 다중 상속일 때 발생하는 문제를 해결해준다. 책 474-477 참조.
class Stack:
def __init__(self, data):
self.data = list(data)
def __getattr__(self, name):
if name in ('pop',):
return getattr(self.data, name)
raise NameError("'{}' not defined".format(name))
def __repr__(self):
return repr(self.data)
def push(self, d):
self.data.append(d)
s = Stack((1,2,3))
s.push(5)
s.push(6)
s.push(7)
print(s)
print (s.pop())
print (s.pop())
print(s)
s.append(4)