# -*- 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')