python类是实例的工厂_python 类工厂

# 创建工厂类函数

def create_animal_class():

def init(self,name):

self.name = name

def eat(self):

pass

def go_to_vet(self):

pass

return type('Animal',(object,),{

'__doc__': "a class representing an animal", '__init__': init,

'eat': eat, 'go_to_vet': go_to_vet

})

animal1 = create_animal_class()

animal2 = create_animal_class()

print(animal1 == animal2)

def creat_animal_classes():

class Animal(object):

def __init__(self, name):

self.name = name

def eat(self):

pass

def go_to_vet(self):

pass

return Animal

class C(object):

foo = 'bar'

@classmethod

def classfoo(cls):

return cls.foo

#关于单例模式(让类工厂返回类的实例,而不是返回类)

def CPrime(new_foo='bar'):

if new_foo == 'bar':

return C()

class SubC(C):

foo = new_foo

return SubC()

cprime = CPrime('foo')

print(cprime)

cprime = CPrime('foo1')

print(cprime)

# 上述方式存在的问题:很多类需要将参数发送给__init__方法,此时该函式就无法处理这种情况

import csv

from django import forms

def CredentialForm(service,*args,**kwargs):

"返回类实例"

keys = []

with open('creds.csv','r') as csvfile:

for row in csv.reader(csvfile):

if row[0].lower() != service.lower():

continue

keys.append(row[1])

attrs = {}

for key in keys:

field_kw = {}

if key == 'password':

field_kw['widget'] = forms.PasswordInput

attrs[key] = forms.CharField(**field_kw)

metaclass = type(forms.Form)

cls = metaclass('CredentialForm',(forms.Form,),attrs)

return cls(*args,**kwargs)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值