相关疑难解决方法(0)

def __init __(self)的用处?

我对python很新,并注意到这些帖子: Python __init__和self他们做了什么?Python类没有使用def __init __(self)

然而,在玩完它之后,我注意到这两个类别给出了明显相同的结果 -

class A(object):
    def __init__(self):
        self.x = 'Hello'

    def method_a(self, foo):
        print self.x + ' ' + foo
Run Code Online (Sandbox Code Playgroud)

(来自这个问题)

class B(object):
    x = 'Hello'
    def method_b(self,foo):
        print self.x + ' ' + foo
Run Code Online (Sandbox Code Playgroud)

这两者之间有什么真正的区别吗?或者,更一般地说,是否确实__init__改变了关于类的属性的任何内容?在文档中提到了__init__在创建实例时调用的文档.这是否意味着在实例化之前建立x了类B

python

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

在Python中使用类对函数进行分组

我已经成为Python科学程序员已有几年了,随着程序越来越大,我发现自己遇到了一个特定的问题.我是自学成才,因此我从未接受过任何正式的培训,并且花了很多时间在"适当"的Python编码"惯例"上.

无论如何,到目前为止,我发现自己总是创建一个utils.py文件,我将所有已定义的函数存储在我的程序使用的文件中.然后我发现自己将这些功能分组到各自的目的中.我知道分组事物的一种方式当然是使用类,但我不确定我的策略是否违背实际应该使用的类.

假设我有一堆功能大致相同的事情:

def add(a,b):
    return a + b

def sub(a,b):
    return a -b

def cap(string):
    return string.title()

def lower(string):
    return string.lower()
Run Code Online (Sandbox Code Playgroud)

现在显然这4个函数可以看作是两个单独的目的,一个是计算,另一个是格式化.这就是逻辑告诉我要做的事情,但我必须解决它,因为我不想初始化对应于类evertime的变量.

class calc_funcs(object):

    def __init__(self):
        pass

    @staticmethod
    def add(a,b):
        return a + b

    @staticmethod
    def sub(a, b):
        return a - b

class format_funcs(object):
    def __init__(self):
        pass

    @staticmethod
    def cap(string):
        return string.title()

    @staticmethod
    def lower(string):
        return string.lower()
Run Code Online (Sandbox Code Playgroud)

通过这种方式,我现在将这些方法"组合"成一个很好的包,可以根据它们在程序中的角色更快地找到所需的方法.

print calc_funcs.add(1,2)
print format_funcs.lower("Hello Bob")
Run Code Online (Sandbox Code Playgroud)

然而,话虽如此,我觉得这是一种非常'unpython-y'的做事方式,它只是感觉凌乱.我是想以正确的方式思考这个还是有另一种方法?

python class conventions

23
推荐指数
2
解决办法
6144
查看次数

标签 统计

python ×2

class ×1

conventions ×1