HOME Python �񤭹���

Python �Υ��饹�����ƥ�


1. ����

����ʸ�����Ū�ϡ� Python �Ǽ����� class ����Ȥ����᥽�åɤ������������Υ��饹�Υ��󥹥��󥹤��켫�� �ʰ��̤� self �Ƚ񤫤��� �Ǥ��뤳�Ȥ���ͳ���������뤳�ȤǤ���

¾�θ���Ǥϥ᥽�åɤ��������Ȥ����������򥤥󥹥��󥹤ˤ���Ȥ�����ˡ�ϼ������Ƥ��餺�� this �ʤɤ�ͽ����Ȥäƥ��󥹥��󥹤�ɽ���Τ�����Ū�Ǥ��� Python ���������ȼ���ή����ȤäƤ��ޤ��� �����������Τ��Ȥ��������������Ȥϸ�������ޤ���Ǥ����� �ɤΥ����Ȥ�����Ϸ�ޤꤴ�Ȥ��ǺѤޤ��Ƥ��ޤäƤ��ޤ��� ������������ǤϤɤ��� Python �Υ��饹�����ƥ�����򤷤����ˤʤ�ʤ��Τǡ�Python �ǥ��饹�����ƥब �ɤΤ褦�˼������Ƥ��뤫��¬���ʤ��顢��� self �ˤĤ��������������Ȼפ��ޤ���

2. ���֥������Ȼظ��ץ�����ߥ󥰤�����

���֥������ȤȤϡ��ǡ����Ȥ���������³����ޤȤ᤿��ΤǤ��� ���֥������Ȥ�°����ǡ����ȼ�³����ޤȤ�ƥ��֥������Ȥ�°���Ȥ����ޤ��� ���֥������Ȥϳ��ع�¤����������ֲ��γ��ؤ򥤥󥹥��󥹤ȸƤӡ� �������γ��ؤ򥯥饹�ȸƤӤޤ��� ���饹�ⳬ�ع�¤�ˤʤäƤ��ꡢ���γ��ؤΥ��饹�Ͼ�γ��ؤΥ��饹��°��������Ѥ��ޤ�(�Ѿ��Ȥ����ޤ��ˡ� �ޤ���ɬ�פ˱����ƾ�γ��ؤ�°�����������뤳�Ȥ��Ǥ��ޤ��� �ƥ��饹��ʣ�����Ĥ��Ȥ��������ȡ��ƥ��饹��1�Ĥ˸��ꤹ����줬����ޤ��� Python ��ʣ���οƥ��饹������ޤ���¿�ŷѾ�����Ȥ����ޤ��ˡ�

�ܤ����ϡ� Wikipedia (���ܸ�� �䡢 Wikipedia (�Ѹ�� �򸫤Ƥ����������ܤ������⤵��Ƥ��ޤ���

3. Python �Υ��饹�����̤ν���

�ޤ������̤� Python �Υ��饹�����ƥ��Ȥäƥץ�������񤤤Ƥߤޤ��礦��

IT ��Ȥ�ǧ���� 'LiveGate' �ǤϤ�������� IT ���ѼԤ�ۤäƤ��ޤ������ѼԤ����ξ�����������ץ������� Python �ǽ񤭤ޤ�����¿ʬ�ǡ����١����ȤĤʤ��äƤ���Ȼפ��ޤ����������ǤϤ���ϳ䰦���ޤ��� ���ơ�IT ���ѼԤ�ɽ�����饹�򼡤��ͤ˽񤭤ޤ����� [code 1] (workers.py)

01:     #! /usr/bin/env python
02:     
03:     """
04:     Workers in a IT company named LiveGate
05:     """
06:     
07:     class Workers:
08:         """ This is a class of workers working in the company."""
09:         
10:         def __init__(self, name, position, email, age, salary):
11:             self.name = name
12:             self.position = position
13:             self.email = email
14:             self.age = age
15:             self.salary = salary
16:             
17:     
18:     class ITWorkers(Workers):
19:         """ This is a class of IT engineers. """
20:         
21:         OS = 'WinNT'
22:         
23:         def __init__(self, language, *av):
24:             Workers.__init__(self, *av)
25:             self.language=language
26:     
27:         def work(self, n):
28:             """ IT engineers should work."""
29:     
30:             if self.position == 'web creator':
31:                 w = 'makes web site'
32:             elif self.position == 'server administrator':
33:                 w = 'checks the trafic'
34:             elif self.position == 'programmer':
35:                 w = 'writes programs'
36:     
37:             print '%s %s for %d, hours using %s on %s' % (self.name, w, n, self.language, self.OS)
38:     
39:     ##------------------------------------------------------------------------------------------------
40:     henley = ITWorkers('PHP', 'Henley', 'web creator', '[email protected]', 32, 700)
41:     thomas = ITWorkers('Python', 'Thomas', 'server administrator', '[email protected]', 37, 900)
42:     gates  = ITWorkers('C', 'Gates', 'programmer', '[email protected]', 42, 1200)
43:     
44:     henley.OS = 'Mac'
45:     thomas.OS = 'Linux'
46:     
47:     if __name__ == '__main__':
48:     
49:         henley.work(8)
50:         thomas.work(7)
51:         gates.work(10)
�ޤ���ϫƯ�Ԥ�ɽ�� class Workers ������� (7--15 ����)�� ���Υ��֥��饹�Ȥ��� ITWorkers ��������Ƥ��ޤ� (18--37 ���ܡˡ� 18 ���ܤ� ITWorkers(Workers) �� ITWorkers �� Workers �Υ��֥��饹�Ǥ��뤳�Ȥ򼨤��Ƥ��ޤ��� ITWorkers �Ͽƥ��饹�� Workers ��°��������Ѥ��ޤ��� Workers ���饹�Υ��󥹥��󥹤Ͻ���������Ȥ��� ���󥹥����ѿ��Ȥ��ơ�̾�������e-mail ���ɥ쥹��ǯ�𡢵������ݻ�����ޤ��� ITWorkers �Ϥ����Τۤ��˻��Ѹ���򥤥󥹥����ѿ��Ȥ�����¸���ޤ��� ���Ѹ���Τۤ��� *av �Ȥ��ƥ쥹�ȥѥ�᡼���� �ޤȤ�Ƥ��ޤ���Workers.__init__ ���Ƥ֤Ȥ������Ÿ�����Ƥ��ޤ��� ���ʤߤ� __init__ �����󥹥��󥹤��ä�ľ��˸ƤФ���ü�᥽�åɤǤ� �ʾ�ά��ǽ�������¼�Ū�ʥ��󥹥ȥ饯�����ˡ�

���ơ�IT ���ѼԤˤ����ʬƯ���Ƥ���ʤ���Фʤ�ʤ��Τǡ��᥽�å� work ��������ޤ� (25--33 ����)�� work ��2���ܤΰ��� n ��Ư�������֤Ǥ��� �����Ǥϡ�����˱����Ʋ��򡢲����֤�������ɽ����������Ǥ��� �Ĥ��Ǥˡ��Ȥä��ץ�����ߥ󥰸��졢OS ��ɽ�����ޤ��� IT ���ѼԤ���������ԥ塼����Ȥ��Τǡ����� OS ���������Ƥ��ޤ��� ITWorkers ���饹�ˤϥ��饹�ѿ� OS �����ꡢ'WinNT' ���ǥե���Ȥ� OS �����ꤵ��Ƥ��ޤ� (19 ���ܡˡ� �ĤޤꡢLiveGate �Ǥ����̤� WindowNT ��ȤäƤ���Ȥ������ȤǤ��� ���ơ������ǡ�3�ͤ� IT ���ѼԤ��о줷�Ƥ�餤�ޤ��礦��̾���� Henley, Thomas, Gates �Ǥ��� Henley �� web ���ꥨ�������Ǥ����ݽѲ�ȩ����� Mac ��ȤäƤ��ޤ� (44 ���ܡˡ� Thomas �ϥ����ƥ�����ԤǤ����Ż�������� Linux ��Ȥ��ޤ� ��45 ���ܡˡ� �ץ�����ޡ��� Gates �ϥ��ǥ��������Ȥ���� OS �ˤϤ������ʤ��Τǥǥե���Ȥ� 'WinNT' ��Ȥä� �Ż��򤷤Ƥ��ޤ���Henley, Thomaso, Gates �Ϻ������줾�� 8, 7, 10 ����Ư���ޤ��� (43--45)��

�����ǡ����դ������Τϡ�henley �� thomas �˰㤦 OS �����ꤹ��Ȥ������Ȥϡ� ����̾�����֤� OS �Ȥ�������ȥ꡼��ä���Ȥ������ȤǤ���gates ��̾�����֤ˤ� OS �Ȥ�������ȥ꡼ ���ʤ��Τǡ�ITWorkers ��̾�����֤ޤ�õ���ˤ����ޤ����� henley �� thomas �ϼ�ʬ��̾�����֤� OS �����Ĥ���Τ� �虜�虜���õ���˹Ԥ��ʤ��ǡ���ʬ�Τ�Ȥ��Ȥ������ȤǤ��� Ʊ�ͤˡ�work �Ȥ�������ȥ꡼��ġ��� IT ���ѼԤ�̾�����֤ˤϤ���ޤ��� ITWorkers ��̾�����֤˹ԤäƸ��Ĥ��Ƥ��ޤ���

workers.py ��¹Ԥ���ȼ��Τ褦�ˤʤ�ޤ���

D:\doc\05-07\py_test>python workers.py
Henley makes web site for 8 hours, using PHP on Mac
Thomas checks the trafic for 7 hours, using Python on Linux
Gates writes programs for 10 hours, using C on WinNT

4. �⤷ Python �˥��饹�����ƥब�ʤ��ä��顩

�����ǡ��⤷ Python �˥��饹�����ƥब�ʤ��ä���ɤ�����Ф褤���ͤ��Ƹ��ޤ��礦�� ���֥������Ȼظ���Ȥ�ʤ��ǥץ�������񤯤��Ȥ��������ǽ�Ǥ����� �����Ǥϡ����Ϥǥ��饹�����ƥ���뤳�Ȥ�ͤ��ޤ���

�¤ϡ��ؿ���ǡ����Ȥ��Ƽ�갷�������ʹ�����̣�Ǥδؿ�������ˤ��Ѥ��ƥ��֥������Ȼظ��������Τ� ��ñ�Ǥ����ƥ��֥������Ȥ�̾�����֤ϥϥå���ɽ��Python �Ѹ�Ǥϼ���ˤ��Ѥ���ɽ�����Ȥ��Ǥ��� ���֥������Ȥγ��ع�¤�ϥϥå���ɽ���ع�¤�ˤ��뤳�Ȥˤ�ä�ɽ�����Ȥ��Ǥ��ޤ��� Python ��ؿ���ǡ����Ȥ��Ƽ�갷����Τǡ���ñ�˥��֥������Ȼظ��ˤ��뤳�Ȥ��Ǥ��ޤ���

��ˡ�workers.py �����Υ��饹�����ƥ��Ȥäƽ�ľ���Ƥߤޤ��礦�� ��ľ���������ɤ򸫤�С��ʤ��᥽�åɤ��������� self �ʤΤ����狼��Ȼפ��ޤ���

[code 2] (workers2.py)

01:     #! /usr/bin/env python
02:     
03:     """
04:     This code demostrates how easy to imprement an object orientated system on a functional programming language.
05:     It only requires a nested hash table.
06:     """
07:     
08:     
09:     def Cls(cls=None, **key):
10:         """ making a new class"""
11:         key['class'] = cls
12:         return key
13:     
14:     def new(cls, **key):
15:         """ making an instance """
16:         key['class'] = cls
17:         return key
18:     
19:     
20:     def geta(obj, attr):
21:         """ getting the attribute of object """
22:         if attr in obj:
23:             return obj[attr]
24:         elif(obj['class']):
25:             return geta(obj['class'], attr)
26:         else:
27:             return None
28:     
29:     def tell(obj, method, *av):
30:         """ tell object do something"""
31:         fun=geta(obj, method)
32:         if callable(fun):
33:             return fun(obj, *av)
34:         
35:     if __name__=='__main__':
36:     
37:         def it_work(self, n):
38:             """This funciton demonstrates how IT engineers work.
39:                Notice that arguments of thie function is identical to the method 'work' in workers.py"""
40:                
41:             if geta(self, 'position') == 'web creator':
42:                 w = 'makes web site'
43:             elif geta(self, 'position') == 'server administrator':
44:                 w = 'checks the trafic'
45:             elif geta(self, 'position') == 'programmer':
46:                 w = 'writes programs'
47:     
48:             print '%s %s for %d, hours using %s on %s' %
                                                 (geta(self, 'name'), w, n, geta(self, 'language'), geta(self, 'OS'))
49:             
50:         workers = Cls() # dummy class
51:         it_workers = Cls(workers, OS='winNT', work=it_work) # class of IT workers
52:     
53:         henley = new(it_workers, language='PHP', name='henley',
54:                                  position='web creator', email='[email protected]', age=32, salary=700)
55:         thomas = new(it_workers, language='Python', name='Thomas',
56:                                  position='server administrator', email='[email protected]', age=37, salary=900)
57:         gates  = new(it_workers, language='C', name='Gates',
58:                                  position='programmer', email='[email protected]', age=42, salary=1200)
59:         henley['OS'] = 'Mac'
60:         thomas['OS'] = 'Linux'
61:     
62:         tell(henley, 'work', 8)
63:         tell(thomas, 'work', 7)
64:         tell(gates, 'work', 10)
workers2.py �Ǥ�ñ�㲽�Τ��ᡢ¿�ŷѾ��Ϥʤ��ˤ��ޤ���

�ޤ������饹����ؿ� Cls �ȥ��󥹥��󥹤���ؿ� new �򸫤Ƥߤޤ��礦�� �¤ϡ�ξ���Ȥ�ޤä���Ʊ����ΤǤ�����äƤ��뤳�Ȥϡ���������ѿ��Υϥå���ɽ�˿ƥ��饹�� ɽ�� 'class' ��ä����֤������Ǥ���

���ˡ��ؿ� geta �򸫤Ƥߤޤ��礦������ϥ��֥������Ȥ�°����õ���ؿ��Ǥ��� ���֥������ȤΥϥå���ɽ�ˤ���°�����ʤ���С��ƥ��饹�Υϥå���ɽ����°����õ���Ȥ������Ȥ� �Ƶ�Ū�˹Ԥ��ޤ�������ǡ��Ѿ��ȥ����С��饤�ɤ������Ǥ��ޤ��� °�����ʤ���о��õ���˹Ԥ����ȤǷѾ��������Ǥ��ޤ����ޤ��� ���Υ��֥������Ȥ�°�����������С����°����̵�뤷�Ƥ����Ȥ��Τ� ������������Ǥ��ޤ���

�ޤ����ؿ� tell �� ���֥������Ȥ˲����򤵤���ؿ��Ǥ����ޤ���geta ��Ȥäƥ᥽�åɤ�õ���ޤ��� �����ơ����Ĥ����᥽�åɤ��ؿ��ʤ�С������Ƥ�ǡ���̤��֤��ޤ���

����ǡ����饹�����ƥ���������ؿ� Cls, new, geta, tell ���Ǥ��ޤ����� �����ƴ�ñ�˺�줿���Ȥ����ܤ��Ƥ���������

���ơ�����ä����饹�����ƥ��Ȥä� workers.py ���ľ���� 37 ���ܰʹߤΤ褦�ˤʤ�ޤ���

�ޤ����ؿ� it_work ��������ơ�IT ���ѼԤ�Ư�������ɽ���ޤ��� �������� self �ˤʤäƤ��뤳�Ȥ����դ��Ƥ��������� �ؿ� it_work ����Ǥ� geta ��Ȥä� IT ���ѼԤ�°���� ���Ƥ��ޤ���

�����ơ�it_workers ���饹����Ȥ����ؿ� it_work �ؤΥݥ��󥿡��� 'work' ���ͤȤ��Ƥޤ��� �Ĥޤꡢ�ϥå���ɽ it_workers �� ���� 'work' ���ͤ� it_work �ؤΥݥ��󥿡��Ȥ������ȤǤ��� �ؿ���ǡ����Ȥ��ư�����ȡ��ϥå���ɽ�˴ؿ����Ȥ߹��ळ�Ȥ��Ǥ��ޤ���

workers.py ��Ʊ���褦�˻��ͤ� IT ���ѼԤ��о줵���ޤ��� �ü�᥽�å� __init__ �����ߥ�졼�Ȥ���Τϴ�ñ�ǤϤʤ��Τǡ� �����Ǥϥ��󥹥��󥹤���Ȥ��� IT ���ѼԤ�°�������ƥ�����ɥѥ�᥿���Ȥ���Ϳ���ޤ����� �����ơ��ؿ� tell ��Ȥä�3�ͤ�Ư���Ƥ�餤�ޤ��� workers.py �Ȥޤä���Ʊ����̤������ޤ���

D:\doc\05-07\py_test>python workers2.py
Henley makes web site for 8 hours, using PHP on Mac
Thomas checks the trafic for 7 hours, using Python on Linux
Gates writes programs for 10 hours, using C on winNT
[code 1] �� [code 2] ����٤���ɤ����Ƥ��뤳�Ȥ��狼��Ȼפ��ޤ���
[code 1] [code3]
obj.attribute geta(obj, 'attribute')
obj.method(*av) tell(obj, 'method', *av)
def work(self, n) def it_work(self, n)
����ϡ������ǤϤʤ���Python �� class �ϸ���Ū�ˤ��Τ褦�˼�������Ƥ��ޤ��� �� Python ��ե���󥹥ޥ˥奢�� 3. �ǡ�����ǥ��򸫤Ƥ����������� �ºݡ�geta ��Ʊ��Ư���򤹤�ؿ� getattr ���Ѱդ���Ƥ��ޤ��� �ޤ������֥������Ȥ�̾�����֤��������ϥå���ɽ�� �ü��ѿ� __dict__ ���������Ƥ��ޤ��� ��ˡ����ޥ�ɥ饤�󤫤� 'python' �Ȥ����Ǥ�����ǰʲ��Τ褦�����Ϥ��ƤߤƤ��������� ��Ʀ����ʸ���ϱ����Ǥ���
D:\doc\05-07\py_test>python
Python 2.4.1 (#65, Mar 30 2005, 09:13:57) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
[x]>>> import sys
[x]>>> from workers import *
[1]>>> gates.__dict__
{'salary': 1200, 'name': 'Gates', 'language': 'C', 'age': 42, 'position': 'programmer',
 'email': '[email protected]'}
[2]>>> henley.__dict__
{'salary': 700, 'name': 'Henley', 'language': 'PHP', 'age': 32, 'position': 'web  creator',
 'OS': 'Mac', 'email': '[email protected]'}
[3]>>> ITWorkers.__dict__
{'__module__': 'workers', 'work': <function work at 0x00A34630>, 'OS': 'WinNT',
'__doc__': ' This is a class of IT engineers. ', '__init__': <function __init__
at 0x00A345F0>}
[4]>>> ITWorkers.work(gates, 10)
Gates writes programs for 10, hours using C on WinNT
[5]>>>  gates.__class__.work(gates, 10)
Gates writes programs for 10, hours using C on WinNT
[6]>>> getattr(henley, 'OS')
'Mac'
[7]>>> getattr(henley, 'work')
<bound method ITWorkers.work of <workers.ITWorkers instance at 0x00A33760>>
[8]>>> getattr(henley, 'work')(8)
henley makes web site for 8 hours, using PHP on Mac
sys �� workers �� import ���Ƥ��顢 ���ĤΥ��ޥ�ɤ����Ϥ���ͷ��Ǥߤޤ��� �ޤ���gates ��̾�����֤򸫤Ƥߤޤ��礦 ([1])�����������ʥ���ȥ꡼������ޤ����� 'OS' �Ϥ���ޤ��� ���� henley ��̾�����֤򸫤Ƥߤޤ��礦 ([2])�� 'OS' ���������Ƥ��ޤ��� ����ˡ�ITWorkers ��̾�����֤򸫤Ƥߤޤ��礦 ([3])�� __module__, __doc__ �ʤɤΤ��餫����������줿�ѿ��Τۤ��� 'OS' �� work, __init__ ���������Ƥ��ޤ��� �ä˥᥽�åɤϡ�<function work at 0x00A34630> �Τ褦���������Ƥ��ꡢ�ؿ��Ȥ��ƥ��꡼����ݻ�����Ƥ��뤳�Ȥ��狼��ޤ��� ���˽Ҥ٤��褦�ˡ�henley �ϼ�ʬ�� OS ���������Ƥ���Τ� �����Ȥ���gates ���������Ƥ��ʤ��Τǡ� ���õ���˹Ԥ���class ITWorkers �Ǹ��Ĥ��ä� OS ��Ȥ��ޤ���

���ơ�ITWorkers ���饹�ˤ� work �Ȥ����ؿ����������Ƥ���Τǡ� [4] �Τ褦�� ľ�ܸƤӽФ��Ƹ��ޤ��礦��gates.work(10) �Ȥ����Τ�Ʊ����̤ˤʤ�ޤ��� �ޤ������󥹥��󥹤ˤ� __class__ �Ȥ����ü��ѿ������ꡢ ��ʬ��°���륯�饹��ؤ��ޤ������äơ� [5] �Τ褦�˸ƤӽФ��Ƥ�Ʊ����̤������ޤ���

�Ǹ�� getattr ��Ȥä�ͷ��Ǥߤޤ��礦��[6] �˼����褦�ˡ� getattr(henley, 'OS') �� henley.OS ��Ʊ����̤ˤʤ�ޤ��� ���ˡ��᥽�åɤ򸫤Ƥߤޤ��礦 ([7] )�� ���Τ褦�ʷ�̤��֤äƤ��ޤ���
<bound method ITWorkers.work of <workers.ITWorkers instance at 0x00A33760>>
<workers.ITWorkers instance at 0x00A33760> ����ʬ�� henley �Υ��ɥ쥹�Τ褦�Ǥ����ޤ������δؿ��� 'function' �ǤϤʤ� 'bound method' ��ɽ������ޤ��� ���Ρ�'bound method' �� [8] �Τ褦�˸ƤӽФ����Ȥ��Ǥ��ޤ��� ���Τ褦���Ѳ����Ƥ��뤳�Ȥ���������ƤӽФ���硢�������� ��ʬ���Ȥ�Ĥ��ʤ����ɤ���ͳ�Ǥ�����⡢��������ͳ�Ϥ���ʤ��Ȥ���Τϥ�����Ǥʤ�����Ǥ��礦�� 'bound method' �� [code 2] �δؿ� 'tell' �ι�ʸ����Ȥߤʤ��ޤ���

�����Τ��Ȥ��顢�ؿ�������˥��饹�����ƥ��Ƴ�������硢 �᥽�åɤȤ�����������ؿ��ϥ��󥹥��󥹤�����ˤȤ�Τ������Ǥ���Ȥ����ޤ��� class �Τʤ������������³���ϡ� def ��Ȥäơ��̾�δؿ��Ȥޤä���Ʊ�ͤ��������Ƥ��뤳�Ȥ��顢 �������פ����Υ��饹�˸��ꤵ�줿��ΤΡ��̾�δؿ���Ʊ���Ǥ���Ȥ������Ȥ��Ǥ��ޤ��� �Ĥޤꡢ�᥽�å�������������� self �Ǥ���Τ�����������Ԥ��Ǥ���Ȥ������ȤǤ��� �������ʤ��ȡ����󥹥��󥹤˴ޤޤ���ѿ��򻲾Ȥ��뤳�Ȥ��Ǥ��ޤ���

4. ������

Pyhton �ϴ���Ū�ˤϡʹ�����̣�ǤΡ˴ؿ�������ǡ����֥������Ȼظ��ϥϥå���ɽ��ȤäƸ��դ�����ΤǤ��� ����������Ȥ�ȥ��֥������Ȼظ�����Ȥ����߷פ��줿 C++, Java, Ruby �ʤɤȤϰ㤤�ޤ���

Python �ϼ�³��������򡢴ؿ�����ȥ᥽�å������ʬ��������ˡ� ���Ƥ�ؿ�����ˤ����᥽�å�����Ȥ��ƻȤ������������򥤥󥹥��󥹤˳�����Ƥ�Ȥ��� ��«����Ƴ�����ޤ�����

���Τ褦�ˤ����Τϡ��ؿ�������ϡ����֥������Ȼظ���������������⤤�Ȥ�����ǰ�Ǥ��礦�� Python �ϴؿ������� Haskell ����¿��ʱƶ�������Ƥ��뤤���Ƥ��ޤ��� �ºݡ�[code 2] �Ǽ������褦�˴ؿ��������Ȥ��Х��֥������Ȼظ��ϴ�ñ�˼����Ǥ��ޤ���


HOME Python �񤭹���