第040讲:类和对象:一些相关的BIF | 课后测试题及答案

测试题:

0. 如何判断一个类是否为另一个类的子类?

答:使用 issubclass(class, classinfo) 函数,如果第一个参数(class)是第二个参数(classinfo)的一个子类,则返回 True,否则返回 False。
另外以下这些常识你应该知道:

  • 一个类被认为是其自身的子类
  • classinfo 可以是类对象组成的元祖,只要 class 与其中任何一个候选类的子类,则返回 True
  • 在其他情况下,会抛出一个 TypeError 异常

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

答:使用 isinstance(object, classinfo) 函数,如果第一个参数(object)是第二个参数(classinfo)的实例对象,则返回 True,否则返回 False。
另外以下这些常识你应该知道:

  • 如果 objec t是 classinfo 的子类的一个实例,也符合条件
  • 如果第一个参数不是对象,则永远返回False
  • classinfo 可以是类对象组成的元祖,只要class与其中任何一个候选类的子类,则返回 True
  • 如果第二个参数不是类或者由类对象组成的元祖,会抛出一个 TypeError 异常

2. 如何优雅地避免访问对象不存在的属性(不产生异常)?

答:有两种方法可以做到。
第一种先使用 hasattr(object, name) 函数判断属性是否存在,如果存在再访问(第一个参数(object)是对象,第二个参数(name)是属性名的字符串形式);
第二种方法是直接使用 getattr(object, name[, default]) 函数并设置 default 参数(返回对象指定的属性值,如果指定的属性不存在,返回default(可选参数)的值)。

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

答: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 = C()
>>> c.x
10
>>> c.x = 12
>>> c.x
12

答:x = property(getXSize, setXSize, delXSize)

5. 通过自学【扩展阅读】Python 函数修饰符(装饰器)的使用,使用修饰符修改以下代码。

代码A:

class CodeA:
    def foo():
        print("调用静态方法 foo()")

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

代码B:

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

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

6. 你真的理解了修饰符的用法吗?那请你写出以下代码没有用上修饰符的等同形式:

@something
def f():
    print("I love FishC.com!")

答:其实 Python 的修饰符就是一种优雅的封装,但要注意的是只可以在模块或类定义内对函数进行修饰,不允许修饰一个类。
一个修饰符就是一个函数,它将被修饰的函数做为参数,并返回修饰后的同名函数或其它可调用的东西。

@something
def f():
    print("I love FishC.com!")

# 相当于

def f():
    print("I love FishC.com!")

f = something(f)

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

class C:
    def __init__(self, size=10):
        self.size = size
        
    @property
    def x(self):
        return self.size

    @x.setter
    def x(self, value):
        self.size = value

    @x.deleter
    def x(self):
        del self.size
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值