草庐IT

python - 在使用 @property 装饰器时在属性的 setter 方法中使用 super() 会引发 AttributeError

尝试覆盖子类中的属性时,我对这种行为感到有些困惑。第一个示例设置了两个类,Parent和Child。Parent继承自object,而Child继承自Parent。属性a是使用属性装饰器定义的。当调用child.a的setter方法时,会引发AttributeError。在第二个示例中,通过使用property()函数而不是装饰器,一切都按预期工作。谁能阐明为什么行为不同?另外,是的,我知道不需要Child中的__init__定义。示例1-使用@propertyclassParent(object):def__init__(self):self._a='a'@propertydefa(

python - `super(...)` 和 `return super(...)` 有什么区别?

我刚刚开始学习pythonOOP。在一些框架的源代码中,我遇到了returnsuper(...并且想知道两者之间是否有区别。classa(object):deffoo(self):print'a'classb(object):deffoo(self):print'b'classA(a):deffoo(self):super(A,self).foo()classB(b):deffoo(self):returnsuper(B,self).foo()>>>aie=A();bee=B()>>>aie.foo();bee.foo()ab在我看来是一样的。我知道如果你愿意,OOP会变得非常复杂,但

python - python super 调用中的*args和**kwds

我试图理解在Python中创建子类时*args和**kwds的用法。我想了解为什么这段代码会这样运行。如果我在调用super().__init__时遗漏了*args和**kwds,我会得到一些奇怪的解包参数。这是我的测试用例:classAnimal(object):def__init__(self,moves,num_legs):self.moves=movesself.num_legs=num_legsdefdescribe(self):print"Moves:{},num_legs:{}".format(self.moves,self.num_legs)classSnake(Ani

python - `super()` 在 `__new__` 中有什么

注意:使用Python实现享元实现的一部分importweakrefclassCarModel:_models=weakref.WeakValueDictionary()def__new__(cls,model_name,*args,**kwargs):model=cls._models.get(model_name)ifnotmodel:model=super().__new__(cls)cls._models[model_name]=modelreturnmodeldef__init__(self,model_name,air=False):ifnothasattr(self,"i

python - 在 PyCharm 中创建 super 用户 Django

我正在学习基本教程,但出于某种原因,我每次都尝试创建super用户(runmanage.pyTask-->createsuperuser)我在程序中遇到错误。它返回“super用户已创建”。但是在给我这个错误之后:Traceback(mostrecentcalllast):File"",line1,inImportError:cannotimportname'setup_environ'当我尝试登录127.0.0.1:8000/admin时我得到的凭据不正确。有什么想法吗?到目前为止,我所有的都是通过pycharm安装的django和python3.4和django1.7.

python - 如何显示 0-N 范围内的所有数字 "super numbers"

程序要求用户输入一个数字N。该程序应该显示0-N范围内的所有“super数字”。Supernumber:isanumbersuchthatthesumofthefactorialsofitsdigitsequalsthenumber.例子:12!=1!+2!=1+2=3(不是super)145=1!+4!+5!=1+24+120(super)我似乎被卡住的部分是当程序显示0-N范围内的所有数字时,这些数字是“super数字”。我已经得出结论,我需要一个循环来解决这个问题,但我不知道该怎么做。因此,例如,该程序应该读取0-50之间的所有数字,并且只要数字超大,它就会显示出来。所以它只显示

python - 什么是 Python 中的兄弟类?

Python2文档说super()函数“返回一个代理对象,该对象将方法调用委托(delegate)给类型的父类或兄弟类。”问题:什么是Python中的兄弟类?如何将方法调用委托(delegate)给兄弟类?我的假设是给定类的兄弟是从同一父类继承的类。我起草了以下代码以查看如何将方法调用委托(delegate)给sibling,但它没有用。我做了什么或理解错了什么?classClassA(object):defMethodA(self):print"MethodAofClassA"classClassB(ClassA):defMethodB(self):print"MethodBofCl

Python:RuntimeError:从未调用过 %S 的父类(super class) __init__()

我尝试对Python中的对象(继承自不同类的类的实例-具体来说,QtGui.QLabel)执行一些操作(setParent)>),但在运行时出现上述错误。该对象本身有一些具有实际内容的字段(在调试时验证),但出于某种原因我无法“使用”它。该错误是什么意思,我该如何解决?对于一些额外的信息,我会说该对象是在我尝试对其执行此操作之前从静态方法返回的。子类有自己的__init__()函数:def__init__(self,image,father):super(AtomicFactory.Image,self).__init__(father)self.raw_attributes=imag

python:__getattr__ 的协作 super 调用

我正在使用类似于此代码的东西:classBaseClass(object):def__getattr__(self,attr):returnlambda:'1'classSubClass(BaseClass):deffoo(self):suffix='2'returnsuper(SubClass,self).foo()+suffixclassSubClass2(SubClass):deffoo(self):suffix='3'returnsuper(SubClass2,self).foo()+suffixo=SubClass2()printo.foo()我希望看到“123”的输出,但我

python - 在 Python 中使用 super() 是个好主意吗?

或者我应该只显式引用我想调用其方法的父类(superclass)吗?在引用它们的构造函数时重复父类(superclass)的名称似乎很脆弱,但是这个页面http://fuhm.net/super-harmful/对使用super()提出了一些很好的论据。 最佳答案 本书ExpertPythonProgramming第3章讨论了“super陷阱”这个话题,值得一读。以下是本书的结论:Superusagehastobeconsistent:Inaclasshierarchy,supershouldbeusedeverywhereorno