def 建立_幕類方法呼叫(幕類成員): """建立幕類方法,把類別內 函數 釋放到 類別外。 主要是把 物類內函數 的 (self, ...) 變成 (...)。 幫助匿名幕類使用幕類方法。 """ 執行語句 = "" 方法名稱 = [] #藉由for迴圈一個一個抓取_幕類成員 for 成員 in 幕類成員: #取成員名字,其成員內容為('追蹤', <function TurtleScreen.tracer at 0x02BAAF18>)格式 名稱, 物件位置 = 成員 #去掉為底線開頭的方法 if ord(名稱[0]) >= ord('a'): #放入名稱進 方法名稱 方法名稱 += [名稱] try: #抓取_幕類方法的參數 pl1, pl2 = getmethparlist(eval('_幕類.' + 名稱)) if pl1 == "": continue 方法宣告 = ("def %(key)s%(pl1)s: return _取幕().%(key)s%(pl2)s" % { 'key': 名稱, 'pl1': pl1, 'pl2': pl2 }) 執行語句 += 方法宣告 + '\n' + 名稱 + ".__doc__ = _幕類." + 名稱 + ".__doc__" + "\n\n" #eval(名稱).__doc__ = eval('_幕類.'+名稱).__doc__# _screen_docrevise(eval('_幕類.'+名稱).__doc__) except: print('_幕類.' + 名稱 + ' No put to main') return 執行語句, 方法名稱
def 建立龜類方法呼叫(龜類成員): """建立龜類方法,把類別內 函數 釋放到 類別外。 主要是把 物類內函數 的 (self, ...) 變成 (...)。 幫助匿名龜使用龜類方法。 """ 執行語句 = "" 方法名稱 = [] #藉由for迴圈一個一個抓取龜類成員 for 成員 in 龜類成員: #取成員名字,其成員內容為('速度', <function TPen.speed at 0x02CF9C00>)格式 名稱, 物件位置 = 成員 # 暴力 debug if 名稱 == 'screens': continue #去掉為底線開頭的方法 if ord(名稱[0]) >= ord('a'): #放入名稱進 方法名稱 方法名稱 += [名稱] try: #抓取龜類方法的參數,回傳兩個參數,第一個為傳入參數名稱(有包含預設值),第二個為傳入參數名稱 #舉例:(fun, btn=1, add=None) (fun, btn, add) pl1, pl2 = getmethparlist(eval('龜類.' + 名稱)) #如果回傳為空,此方法無參數傳入 if pl1 == "": #如果為空則跳過繼續執行 continue 方法宣告 = ("def %(key)s%(pl1)s: return _取筆().%(key)s%(pl2)s" % { 'key': 名稱, 'pl1': pl1, 'pl2': pl2 }) 執行語句 += 方法宣告 + '\n' + 名稱 + ".__doc__ = 龜類." + 名稱 + ".__doc__" + "\n\n" #eval(名稱).__doc__ = eval('龜類.'+名稱).__doc__ # _turtle_docrevise(eval('龜類.'+名稱).__doc__) except: print('龜類.' + 名稱 + ' No put to main') return 執行語句, 方法名稱
# 暴力 debug # if methodname == 'screens': continue if ord(m[0]) >= ord('a'): #128: # 這一行是為了 僅要 中文 部分,英文部分原作者已經有,不需我多寫。 ''' cmd= m + '= ' + 'Turtle.' + m + '\n' cmdString += cmd ''' methodPutToMain += [m] try: pl1, pl2 = getmethparlist(eval('龜類.' + methodname)) if pl1 == "": print(">>>>>>", pl1, pl2) continue defstr = ("def %(key)s%(pl1)s: return _取筆().%(key)s%(pl2)s" % { 'key': methodname, 'pl1': pl1, 'pl2': pl2 }) cmdString += defstr + '\n\n' exec(defstr) eval(methodname).__doc__ = eval( '龜類.' + methodname ).__doc__ # _turtle_docrevise(eval('龜類.'+methodname).__doc__)
# 暴力 debug # if methodname == "screens": continue if ord(m[0]) >= ord("a"): # 128: # 這一行是為了 僅要 中文 部分,英文部分原作者已經有,不需我多寫。 """ cmd= m + '= ' + 'Turtle.' + m + '\n' cmdString += cmd """ methodPutToMain += [m] try: pl1, pl2 = getmethparlist(eval("龜類." + methodname)) if pl1 == "": print(">>>>>>", pl1, pl2) continue defstr = "def %(key)s%(pl1)s: return _取筆().%(key)s%(pl2)s" % {"key": methodname, "pl1": pl1, "pl2": pl2} cmdString += defstr + "\n\n" exec(defstr) eval(methodname).__doc__ = eval( "龜類." + methodname ).__doc__ # _turtle_docrevise(eval('龜類.'+methodname).__doc__) except: print("龜類." + methodname + " No put to main") for mem in memberOfScreen:
# 暴力 debug # if methodname == 'screens': continue if ord(m[0])>= ord('a'): #128: # 這一行是為了 僅要 中文 部分,英文部分原作者已經有,不需我多寫。 ''' cmd= m + '= ' + 'Turtle.' + m + '\n' cmdString += cmd ''' methodPutToMain += [m] try: pl1, pl2 = getmethparlist(eval('龜類.' + methodname)) if pl1 == "": print(">>>>>>", pl1, pl2) continue defstr = ("def %(key)s%(pl1)s: return _取筆().%(key)s%(pl2)s" % {'key':methodname, 'pl1':pl1, 'pl2':pl2}) cmdString += defstr +'\n\n' exec(defstr) eval(methodname).__doc__ = eval('龜類.'+methodname).__doc__ # _turtle_docrevise(eval('龜類.'+methodname).__doc__) except: print('龜類.' + methodname +' No put to main') for mem in memberOfScreen:
#----------------------------------------------------------------------- ## The following mechanism makes all methods of RawTurtle and Turtle ## available as functions. So we can enhance, change, add, delete ## methods to these classes and do not need to change anything ## here. ## We have to do this here because some of them may have been ## redefined in our new Turtle ## Copied from original turtle. for methodname in _tg_turtle_functions: pl1, pl2 = _original_turtle_module.getmethparlist( eval('Turtle.' + methodname)) if pl1 == "": continue defstr = ("def %(key)s%(pl1)s: return _getpen().%(key)s%(pl2)s" % { 'key': methodname, 'pl1': pl1, 'pl2': pl2 }) exec(defstr) eval(methodname).__doc__ = _original_turtle_module._turtle_docrevise( eval('Turtle.' + methodname).__doc__) del pl1, pl2, defstr ## Now for some tests