02-03 11—15


11、有用過with statement(語句)嗎?它的好處是什么?

# 答案
'''
with語句會在嵌套的代碼執行之后,自動關閉文件。這種做法的還有另一個優勢就是,無論嵌套的代碼是以何種方式結束的,它都關閉文件。如果在嵌套的代碼中發生異常,它能夠在外部exception handler catch異常前關閉文件。如果嵌套代碼有return/continue/break語句,它同樣能夠關閉文件。
'''

12、下列數據結構中,哪一種是不可迭代的

'''
    A.  dict
    B.  object
    C.  set
    D.  str
'''

# 答案:
B

13、實現一個Singleton單例類,要求遵循基本語言編程規范(用盡量多的方 式)。

# 答案:
1.__new__
class Borg(object):
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, '_instance'):
            ob = super(Borg, cls)
            cls._instance = ob.__new__(cls, *args, **kwargs)
        return cls._instance
class MyClass(Borg):
    def __init__(self):
        self.a = 1
        
2.共享屬性
class Borg2(object):
    _state = {}

    def __new__(cls, *args, **kwargs):
        ob = super(Borg2, cls).__new__(cls, *args, **kwargs)
        ob.__dict__ = cls._state
        return ob

class MyClass(Borg2):
    def __init__(self):
        self.a = 1
        
3.裝飾器
def singleton(cls, *args, **kwargs):
    instances = {}

    def getinstance():
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]

    return getinstance

@singleton
class MyClass(object):
    def __init__(self):
        self.a = 1

4.import方法
# mysingleton .py
class MyClass(object):
    def __init__(self):
        self.a = 1

s_myclass = MyClass()

from mysingleton import s_myclass

s_myclass.a

14、請􏰂述with的用法,如果自己的類需要支持with語句,應該如何書寫?

基本格式
with context_expression [as target(s)]:
    with-body

這里 context_expression 要返回一個上下文管理器對象,該對象並不賦值給 as 子句中的 target(s) ,如果指定了 as 子句的話,會將上下文管理器的 __enter__() 方法的返回值賦值給 target(s)。
target(s) 可以是單個變量,或者由“()”括起來的元組(不能是僅僅由“,”分隔的變量列表,必須加“()”)。

自定義的上下文管理器要實現上下文管理協議所需要的 __enter__() 和 __exit__() 兩個方法
context_manager.__enter__() :進入上下文管理器的運行時上下文,在語句體執行前調用。with 語句將該方法的返回值賦值給 as 子句中的 target,如果指定了 as 子句的話
context_manager.__exit__(exc_type, exc_value, exc_traceback) :退出與上下文管理器相關的運行時上下文,返回一個布爾值表示是否對發生的異常進行處理。

15、python 中如何判斷一個對象是否可調用? 哪些對象可以是可調用對象?如何定義一個類,使其對象本身就是可調用對象?

# 答案:
# python 中如何判斷一個對象是否可調用
def func():
    pass
print(callable(func))  # True

# 哪些對象可以是可調用對象
1.類對象
2.所有帶有_call_()方法的對象

# 如何定義一個類,使其對象本身就是可調用對象
一個類實例也可以變成一個可調用對象,只需要實現一個特殊方法call()。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM