Python高级编程 读书笔记: 11、第六章_类工厂
程序员文章站
2024-02-09 18:13:58
...
#!/usr/bin/env python
# encoding: utf-8
import six
'''
11、第六章_类工厂
关键:
1 类工厂
含义: 在运行时创建类(注意不是类的实例)的函数,允许创建类时根据情况决定其属性
特点:
1)类本身也是一个对象,它的类是type
2)使用class关键字而不是直接调用type创建类更加可行
2 决定何时应该编写类工厂
原因: 需要基于运行时的信息(如用户输入)创建类时
使用方式: 在函数中根据输入参数的不同,初始化不同的属性,并返回该类(
注意不是返回类的实例)
3 类方法
含义: 不需要类的实例就可以执行的方法,但需要类本身。
特点: 通常使用@classmethod装饰器来装饰一个方法来完成声明。
该方法的第一个参数是cls。
4 单例模式
含义: 只允许一个实例的类模式
参考:
Python高级编程
'''
def createAnimalClass():
def init(self, name):
self.name = name
def eat(self):
pass
def goToVet(self):
pass
return type('Animal', (object,), {
'__init__': init,
'eat': eat,
'goToVet': goToVet,
})
def validCreateAnimalClass():
Animal1 = createAnimalClass()
Animal2 = createAnimalClass()
print Animal1 == Animal2
def getCredentialClass(useProxy=False, twoFactorAuth=False):
if useProxy:
keys = ['email', 'serviceName']
else:
keys = ['username', 'password']
if twoFactorAuth:
keys.append('twoFactorAuth')
class Auth(object):
expectedKeys = set(keys)
def __init__(self, **kwargs):
if set(kwargs.keys()) != self.expectedKeys:
raise ValueError('Keys are incorrect.')
for key, value in kwargs.iteritems():
setattr(self, key, value)
return Auth
class ClassC(object):
foo = 'bar'
@classmethod
def classFoo(cls):
return cls.foo
def createSubClass(newFoo):
class SubC(ClassC):
foo = newFoo
return SubC
def useClassMethod():
c1 = ClassC()
print c1.foo
print c1.classFoo()
subClass = createSubClass('chao')
print subClass.classFoo()
def process():
validCreateAnimalClass()
useClassMethod()
if __name__ == "__main__":
process()
下一篇: 异常处理的两种方法