草庐IT

python - getattr() 的简洁方法,如果在 Python 中不是 None 则使用它

我发现自己经常做以下事情:attr=getattr(obj,'attr',None)ifattrisnotNone:attr()#Dosomething,eitherattr(),orfunc(attr),orwhateverelse:#Dosomethingelse有没有更Pythonic的写法?这是否更好?(至少在性能方面没有,IMO。)try:obj.attr()#orwhateverexceptAttributeError:#Dosomethingelse 最佳答案 由于您调用的是attr,您可以这样做:defdefault

python - __getattr__ 和 getattr 是什么关系?

我知道这段代码是对的:classA:def__init__(self):self.a='a'defmethod(self):print"methodprint"a=A()printgetattr(a,'a','default')printgetattr(a,'b','default')printgetattr(a,'method','default')getattr(a,'method','default')()这是错误的:#will__getattr__affectthegetattr?classa(object):def__getattr__(self,name):return'x

python - 在 django 模板中执行 getattr() 样式查找

Python的getattr()方法在您事先不知道某个属性的名称时很有用。这个功能也可以在模板中派上用场,但我从来没有想出办法来做到这一点。是否有可以进行动态属性查找的内置标签或非内置标签? 最佳答案 我最近还不得不将此代码编写为自定义模板标签。为了处理所有查找场景,它首先执行标准属性查找,然后尝试执行字典查找,然后尝试getitem查找(以使列表工作),然后遵循标准找不到对象时的Django模板行为。(2009年8月26日更新,现在也可以处理列表索引查找)#app/templatetags/getattribute.pyimpor

python - __getattr__ 用于静态/类变量

我有这样的课:classMyClass:Foo=1Bar=2每当调用MyClass.Foo或MyClass.Bar时,我都需要在返回值之前调用自定义方法。在Python中可能吗?我知道如果我创建一个类的实例并且我可以定义我自己的__getattr__方法是可能的。但我的场景涉及使用此类而不创建它的任何实例。我还需要在调用str(MyClass.Foo)时调用自定义__str__方法。Python是否提供这样的选项? 最佳答案 对象的__getattr__()和__str__()可以在其类中找到,因此如果要为类自定义这些内容,则需要类

python - __getattr__ 在模块上

如何在类、模块上实现__getattr__的等价物?示例当调用一个模块的静态定义属性中不存在的函数时,我希望在该模块中创建一个类的实例,并在其上调用与在模块上的属性查找中失败的名称相同的方法.classA(object):defsalutation(self,accusative):print"hello",accusative#notethisfunctionisintentionallyonthemodule,andnottheclassabovedef__getattr__(mod,name):returngetattr(A(),name)if__name__=="__main_

python - 究竟什么是 getattr() 以及如何使用它?

我最近readaboutthegetattr()function.问题是我仍然无法掌握它的用法。我对getattr()的唯一了解是getattr(li,"pop")与调用li.pop相同。我不明白书中提到如何使用它来获取对函数的引用,而直到运行时才知道它的名称。一般来说,这可能是我在编程方面的菜鸟。任何人都可以对这个主题有所了解吗?我何时以及如何准确地使用它? 最佳答案 Python中的对象可以具有属性——数据属性和与这些(方法)一起工作的函数。实际上,每个对象都有内置属性(尝试dir(None)、dir(True)、dir(...

ruby - Python 类似 __getattr__ 用于 Ruby/JRuby

Ruby有类似Python__getattr__的东西吗?在Python中,obj.__getattr__在引用未定义的属性(方法或属性)时被调用。我在Ruby中找到了method_missing,但它不适用于属性。我的用例是:我正在测试Mirah作为JRuby->Java编译器。在标准的JRuby中,Swing方法和属性是“Rubyfied”的(例如:label.setText"x"=>label.text="x"),但在Mirah中不是,因为Mirah没有像JRuby那样的专有运行时库.然后,我想在运行时获取属性引用并将每个调用映射到相应的Swing方法(label.text=>l

python - 如何在不破坏默认行为的情况下覆盖 __getattr__?

如何覆盖__getattr__一个类的方法而不破坏默认行为? 最佳答案 覆盖__getattr__应该没问题-__getattr__仅作为最后的手段调用,即如果实例中没有与名称匹配的属性。例如,如果您访问foo.bar,那么只有在foo没有名为bar的属性时才会调用__getattr__>。如果该属性是您不想处理的属性,请提出AttributeError:classFoo(object):def__getattr__(self,name):ifsome_predicate(name):#...else:#Defaultbehavio

python - 如何在不破坏默认行为的情况下覆盖 __getattr__?

如何覆盖__getattr__一个类的方法而不破坏默认行为? 最佳答案 覆盖__getattr__应该没问题-__getattr__仅作为最后的手段调用,即如果实例中没有与名称匹配的属性。例如,如果您访问foo.bar,那么只有在foo没有名为bar的属性时才会调用__getattr__>。如果该属性是您不想处理的属性,请提出AttributeError:classFoo(object):def__getattr__(self,name):ifsome_predicate(name):#...else:#Defaultbehavio