[Python]小甲鱼Python视频第040课(类和对象:一些相关的BIF )课后题及参考解答

# -*- coding: utf-8 -*-
"""
Created on Tue Mar 12 23:36:51 2019

@author: fengs
"""

"""


0. 如何判断一个类是否为另一个类的子类?
    issubclass(A,B)
    A是B的子类就返回True


1. 如何判断对象 a 是否为 类 A 的实例对象?
    isinstance(a,A)


2. 如何优雅地避免访问对象不存在的属性(不产生异常)?
    a. hasattr(object,name)
    b. getattr(ovject,'变量名') 没获取到会返回None或默认值而不是抛出异常 

3. Python 的一些 BIF 很奇怪,但却十分有用。请问 property() 函数的作用是什么?

    绑定一个类的实例对象在进行获取操作、设置操作和删除操作时对应的函数



4. 请补充以下代码,使程序可以正常运行:
class C:
    def __init__(self, size=10):
        self.size = size

    def getXSize(self):
        return self.size

    def setXSize(self, value):
        self.size = value

    def delXSize(self):
        del self.size

        # 此处应该补充一句代码,程序才能正常运行

>>> c.x
10
>>> c.x = 12
>>> c.x
12

x = property(getXSize,setXSize,delXSize)


"""

import time

"""
5. 通过自学【扩展阅读】Python 函数修饰符(装饰器)的使用,使用修饰符修改以下代码。
class CodeA:
    def foo():
        print("调用静态方法 foo()")

        # 将 foo() 方法设置为静态方法
        foo = staticmethod(foo)
        
class CodeB:
    def foo(cls):
        print("调用类方法 foo()")

        # 将 foo() 方法设置为类方法
        foo = classmethod(foo)


"""
class CodeA:
    @staticmethod
    def foo():
        print("调用静态方法 foo()")
        # 将 foo() 方法设置为静态方法
        #foo = staticmethod(foo)

class CodeB:
    @classmethod
    def foo(cls):
        print("调用类方法 foo()")

        # 将 foo() 方法设置为类方法
        #foo = classmethod(foo)        
        
        
CodeA().foo()
CodeB().foo()


"""
6. 你真的理解了修饰符的用法吗?那请你写出以下代码没有用上修饰符的等同形式:
@something
def f():
    print("I love FishC.com!")
    
f = something(f)
返回的是函数的闭包
"""
def something1(func):
    def call():
        print('---start----')
        start = time.perf_counter()
        func()
        print('-------end------')
        end = time.perf_counter()
        print('used: %s ' % (end - start))
    return call
@something1
def f():
    print("I love FishC.com!")
    
f()


"""
7. 通过自学【扩展阅读】property 的详细使用方法,将第 4 题的代码修改为“使用属性修饰符创建描述符”的方式实现。
"""

class C:
    def __init__(self, size=10):
        self._size = size
        
    @property
    def size(self):
        print('getter')
        return self._size

    @size.setter
    def size(self, value):
        print('setter')
        self._size = value
    @size.deleter
    def size(self):
        print('deleter')
        del self._size

        # 此处应该补充一句代码,程序才能正常运行
c = C()
print('---------------start')
print(c.size)
c.size = 12
print(c.size)
del(c.size)
print('---------------end')

        

  

posted @ 2019-03-17 21:14  Alimy  阅读(449)  评论(0编辑  收藏  举报