zoukankan      html  css  js  c++  java
  • [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')
    
            
    

      

    ~不再更新,都不让我写公式,博客园太拉胯了
  • 相关阅读:
    Linux终端设置免密登陆ssh(以 XShell 为例)
    Docker入门(一)-安装
    find命令总结
    CentOS 恢复 rm -rf 误删除数据
    CentOS系统登陆root用户后发现提示符显示-bash-4.2#(已解决)
    一次在CentOS系统单用户模式下使用passwd命令破密失败的案例
    Ubuntu下配置IP地址
    安装CentOS 6.x报错"Disk sda contains BIOS RAID metadata"解决方法
    YUM命令总结
    git从安装到多账户操作一套搞定(二)多账户使用
  • 原文地址:https://www.cnblogs.com/alimy/p/10548916.html
Copyright © 2011-2022 走看看