小编smi*_*ith的帖子

Python中的类工厂

我是Python的新手,需要一些建议来实现下面的场景.

我在两个不同的注册商处有两个用于管理域名的课程.两者都具有相同的界面,例如

class RegistrarA(Object):
    def __init__(self, domain):
        self.domain = domain

    def lookup(self):
        ...

    def register(self, info):
        ...
Run Code Online (Sandbox Code Playgroud)

class RegistrarB(object):
    def __init__(self, domain):
        self.domain = domain

    def lookup(self):
        ...

    def register(self, info):
        ...
Run Code Online (Sandbox Code Playgroud)

我想创建一个Domain类,给定一个域名,根据扩展名加载正确的注册器类,例如

com = Domain('test.com') #load RegistrarA
com.lookup()

biz = Domain('test.biz') #load RegistrarB
biz.lookup()
Run Code Online (Sandbox Code Playgroud)

我知道这可以使用工厂函数来完成(见下文),但这是最好的方法吗?还是有更好的方法使用OOP功能?

def factory(domain):
  if ...:
    return RegistrarA(domain)
  else:
    return RegistrarB(domain)
Run Code Online (Sandbox Code Playgroud)

python factory

64
推荐指数
4
解决办法
7万
查看次数

ImportError:没有名为backend_tkagg的模块

我有这样的导入和代码:

import pandas as pd
import numpy as np
import statsmodels.formula.api as sm
import matplotlib.pyplot as plt    


#Read the data from pydatasets repo using Pandas
url = './file.csv'
white_side = pd.read_csv(url)    
#Fitting the model    
model = sm.ols(formula='budget ~ article_size',
               data=white_side,
               subset=white_side['producer'] == "Peter Jackson")
fitted = model.fit()
print fitted.summary()
Run Code Online (Sandbox Code Playgroud)

执行此代码后,我有这样的错误:

/usr/bin/python2.7 /home/seth/PycharmProjects/osiris_project/PMN_way/start.py
Traceback (most recent call last):
  File "/home/seth/PycharmProjects/osiris_project/PMN_way/start.py", line 5, in <module>
    import matplotlib.pyplot as plt
  File "/usr/lib64/python2.7/site-packages/matplotlib/pyplot.py", line 98, in <module>
    _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
  File …
Run Code Online (Sandbox Code Playgroud)

python module numpy python-module pycharm

11
推荐指数
3
解决办法
2万
查看次数

在try和except语句中使用return语句是否正确?

如果我在函数末尾有这样的代码:

try:
    return map(float, result)
except ValueError, e:
    print "error", e
Run Code Online (Sandbox Code Playgroud)

在方法的返回部分中使用try /正确吗?有解决这个问题的更明智的方法吗?

python methods exception-handling return try-except

5
推荐指数
1
解决办法
5888
查看次数

无法理解为什么我在这里得到最大的递归深度

我有这样的功能:

def sort(lst, beg, end):
    mid = (beg + end)/2
    sort(lst, beg, mid)
    sort(lst, mid, end)
    i = 0
    j = 0
    for l in range(beg, end):
        if j > end - mid or (i <= mid - beg and lst[beg + i] < lst[mid + j]):
            lst[l] = lst[beg + i]
            i = i + 1
        else:
            lst[l] = lst[mid + j]
            j = j + 1
Run Code Online (Sandbox Code Playgroud)

输入是:sort([1,5,6,6,3,1,5,4,3,3,4,5,6,7,8,5,3,2,4,5],1,10 )

作为输出:

RuntimeError: maximum recursion depth exceeded
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

python sorting recursion

0
推荐指数
1
解决办法
129
查看次数