所以我在这里寻找的是像PHP的print_r函数.这样我就可以通过查看相关对象的状态来调试我的脚本.
python debugging introspection pretty-print python-datamodel
有没有办法获取类实例上存在的属性列表?
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".我希望这能看到脚本各个部分的当前属性.
在我们的团队中,我们定义了大多数测试用例如下:
一个"框架"类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的新手,我感到很迷茫并且不断抨击除了方法以外的所有其他东西.
我有一个类动物,有几个属性,如:
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对象,有几个属性和方法.我想迭代对象属性.
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)
更新:使用属性我只是指这个对象的变量,而不是方法.
我有一个测试用例:
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作为一个可疑的解决方法.
如果我有以下类,那么获取变量和方法的确切列表的最佳方法是什么,不包括超类中的变量和方法?
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) 我有以下课程:
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) 我正在创建一个类来表示查询,如下所示:
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 ×9
class ×2
oop ×2
unit-testing ×2
attributes ×1
debugging ×1
iteration ×1
member ×1
pretty-print ×1
python-3.x ×1
validation ×1