相关疑难解决方法(0)

是否有内置函数来打印对象的所有当前属性和值?

所以我在这里寻找的是像PHP的print_r函数.这样我就可以通过查看相关对象的状态来调试我的脚本.

python debugging introspection pretty-print python-datamodel

876
推荐指数
18
解决办法
75万
查看次数

列出对象的属性

有没有办法获取类实例上存在的属性列表?

class new_class():
    def __init__(self, number):
        self.multi = int(number) * 2
        self.str = str(number)

a = new_class(2)
print(', '.join(a.SOMETHING))
Run Code Online (Sandbox Code Playgroud)

期望的结果是将输出"multi,str".我希望这能看到脚本各个部分的当前属性.

python class python-3.x

256
推荐指数
12
解决办法
51万
查看次数

通过命令行从unittest.TestCase运行单个测试

在我们的团队中,我们定义了大多数测试用例如下:

一个"框架"类ourtcfw.py:

import unittest

class OurTcFw(unittest.TestCase):
    def setUp:
        # something

    # other stuff that we want to use everywhere
Run Code Online (Sandbox Code Playgroud)

还有很多像testMyCase.py这样的测试用例:

import localweather

class MyCase(OurTcFw):

    def testItIsSunny(self):
        self.assertTrue(localweather.sunny)

    def testItIsHot(self):
        self.assertTrue(localweather.temperature > 20)

if __name__ == "__main__":
    unittest.main()
Run Code Online (Sandbox Code Playgroud)

当我编写新的测试代码并希望经常运行它并节省时间时,我所做的就是将"__"放在所有其他测试之前.但它很麻烦,让我分心我编写的代码,而且这会产生的提交噪音很烦人.

因此,例如在进行更改时testItIsHot(),我希望能够这样做:

$ python testMyCase.py testItIsHot
Run Code Online (Sandbox Code Playgroud)

unittest运行 testItIsHot()

我怎样才能做到这一点?

我试图重写这个if __name__ == "__main__":部分,但由于我是Python的新手,我感到很迷茫并且不断抨击除了方法以外的所有其他东西.

python unit-testing

230
推荐指数
8
解决办法
12万
查看次数

打印Python类的所有属性

我有一个类动物,有几个属性,如:


class Animal(object):
    def __init__(self):
        self.legs = 2
        self.name = 'Dog'
        self.color= 'Spotted'
        self.smell= 'Alot'
        self.age  = 10
        self.kids = 0
        #many more...
Run Code Online (Sandbox Code Playgroud)

我现在想要将所有这些属性打印到文本文件中.我现在这样做的丑陋方式就像:


animal=Animal()
output = 'legs:%d, name:%s, color:%s, smell:%s, age:%d, kids:%d' % (animal.legs, animal.name, animal.color, animal.smell, animal.age, animal.kids,)
Run Code Online (Sandbox Code Playgroud)

有更好的Pythonic方法吗?

python oop

150
推荐指数
5
解决办法
21万
查看次数

迭代python中的对象属性

我有一个python对象,有几个属性和方法.我想迭代对象属性.

class my_python_obj(object):
    attr1='a'
    attr2='b'
    attr3='c'

    def method1(self, etc, etc):
        #Statements
Run Code Online (Sandbox Code Playgroud)

我想生成一个包含所有对象属性及其当前值的字典,但我想以动态的方式进行(所以如果以后我添加另一个属性,我也不必记得更新我的函数).

在PHP中,变量可以用作键,但是python中的对象是不可编写的,如果我使用点符号,它会创建一个名为my var的新属性,这不是我的意图.

只是为了让事情更清楚:

def to_dict(self):
    '''this is what I already have'''
    d={}
    d["attr1"]= self.attr1
    d["attr2"]= self.attr2
    d["attr3"]= self.attr3
    return d
Run Code Online (Sandbox Code Playgroud)

·

def to_dict(self):
    '''this is what I want to do'''
    d={}
    for v in my_python_obj.attributes:
        d[v] = self.v
    return d
Run Code Online (Sandbox Code Playgroud)

更新:使用属性我只是指这个对象的变量,而不是方法.

python oop iteration attributes

137
推荐指数
3
解决办法
13万
查看次数

ValueError:<class'myapp.tests.SessionTestCase'>中没有这样的测试方法:runTest

我有一个测试用例:

class LoginTestCase(unittest.TestCase):
    ...
Run Code Online (Sandbox Code Playgroud)

我想在不同的测试用例中使用它:

class EditProfileTestCase(unittest.TestCase):
  def __init__(self):
    self.t = LoginTestCase()
    self.t.login()
Run Code Online (Sandbox Code Playgroud)

这引起了:

ValueError: no such test method in <class 'LoginTest: runTest`
Run Code Online (Sandbox Code Playgroud)

我查看了调用异常的unittest代码,看起来测试不应该以这种方式编写.是否有标准的方法来编写您要测试的内容,以便以后的测试可以重用它?或者有解决方法吗?

我现在添加了一个空runTest方法LoginTest作为一个可疑的解决方法.

python unit-testing

19
推荐指数
5
解决办法
2万
查看次数

获取Python中类的变量和方法的列表

如果我有以下类,那么获取变量和方法的确切列表的最佳方法是什么,不包括超类中的变量和方法?

class Foo(Bar):
  var1 = 3.14159265
  var2 = Baz()
  @property
  def var3(self):
      return 42
  def meth1(self, var):
      return var
Run Code Online (Sandbox Code Playgroud)

我希望元组('var1','var2','var3','meth1')具有最小的开销.这是在Django环境中运行的,它似乎将它的一些类实例变量放在只读__dict__变量中; 一个我无法找到复制方式的壮举.

这是我在玩它时看到的,除了修改__*dir()或手动列出它们之外的任何建议?

>>> a=Foo()
>>> a
<__main__.Foo instance at 0x7f48c1e835f0>
>>> dict(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: iteration over non-sequence
>>> dir(a)
['__doc__', '__module__', 'meth1', 'var1', 'var2', 'var3']
>>> a.__dict__
{}
Run Code Online (Sandbox Code Playgroud)

python

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

如何在不知道名称的情况下获取类的属性

我有以下课程:

class TestClass(object):
def __init__(self, **kwargs):
    for key, value in kwargs.items(): #items return list of dict
        setattr(self, key, value)
Run Code Online (Sandbox Code Playgroud)

示例使用:

obj = MessageItem(**{"testkey1":"tval1", "tkey2":"tval2", "tkey3":"tval3"})
Run Code Online (Sandbox Code Playgroud)

如何在不知道属性名称的情况下迭代此结构?Python 为我们提供了内置方法__getattribute__,但我仍然需要知道请求的属性的名称:

print(obj.__getattribute__("testkey1"))
Run Code Online (Sandbox Code Playgroud)

python

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

有什么方法可以获取所有可能的 Python 类变量,包括没有值的变量?

我正在创建一个类来表示查询,如下所示:

class Query:
    height: int
    weight: int
    age: int
    name: str
    is_alive: bool = True
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,某些变量一开始就使用默认值进行初始化,而其他变量则不然。

我想像这样实现可链接的设置器

    def of_height(self, height):
        self.height = height
        return self

    def with_name(self, name):
        self.name = name
        return self

    ...
Run Code Online (Sandbox Code Playgroud)

目标是从项目中的多个位置调用它,如下所示:

q = Query()
q.of_height(175).with_name("Alice")
Run Code Online (Sandbox Code Playgroud)

然后我想调用一个q.validate()来检查是否有任何字段不存在设置,然后再使用此查询调用 API。

我无法找到一种方法来动态检查所有可能的变量(无论是否设置),以检查是否有任何变量未设置。理想情况下,我不想实现validate每次在此类中添加可能的查询维度时都必须更改的对象。

python validation class member

3
推荐指数
1
解决办法
167
查看次数