Пример #1
0
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 執行語句, 方法名稱
Пример #2
0
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 執行語句, 方法名稱
Пример #3
0
    # 暴力 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__)
Пример #4
0
    # 暴力 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:
Пример #5
0
    # 暴力 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:
Пример #6
0

#-----------------------------------------------------------------------

## 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