我有一个库类,其中取决于它是如何导入的,一种依赖于self.__module__的方法来识别更改行为-取决于我是相对导入还是绝对导入。有没有办法强制类的self.__name__属性绝对返回自身?我意识到一个解决方案是强制每个人以相同的方式导入子类,但想知道是否有一种方法可以从库的角度强制执行它。概要结构我在库中有一个模块project/mylib/foo.pyLibraryClassdefget_name(self):return"%s.%s.%s"%\(self.__module__,self.__class__.__name__,self.some_init_property)p
ctypes.WinDLL("C:\ProgramFiles\AHSDK\bin\ahscript.dll")Traceback(mostrecentcalllast):File"",line1,inFile"C:\Python26\lib\ctypes\__init__.py",line353,in__init__self._handle=_dlopen(self._name,mode)WindowsError:[Error126]Thespecifiedmodulecouldnotbefound我该如何解决?我在C:\Python26\lib\ctypes\__init__.py中
谁能帮我理解为什么这会给我一个错误?错误是“NameError:未定义名称'self'”。我的代码中有一个类似的类,它工作正常吗?我正在使用“xlrd”,team是对workbook.sheet_by_name的引用。classRollout:def__init__(self,team,name):self.team=teamself.name=nameself.jobs={}self.start_row=1self.last_row=self.team.nrowsforiinrange(self.start_row,self.last_row):try:self.jobs[i-1]=
我经常在重写子类中的方法时这样做:defmethod_x(self):x=super(type(self),self).method_x()[Someextracode]returnx我的问题是:super(type(self),self)有捷径吗? 最佳答案 不要那样做:如果super可以只使用type(self)作为它的第一个参数,那么它就不会被写成在第一名。您必须在此处传递实际类,而不是表达式,如果类已被子类化,表达式可能会发生变化。super的第一个参数需要是包含当前方法定义的类,因为您要告诉super在碱基列表中的何处开始
据我所知,self只是一个非常强大的约定,并不是Python中真正的保留关键字。Java和C#将this作为关键字。我真的觉得很奇怪,他们没有在Python中为它做一个保留关键字。这背后有什么原因吗? 最佳答案 因为self只是一个函数的参数,就像任何其他参数一样。例如,下面的调用:a=A()a.x()基本上转换为:a=A()A.x(a)不使self成为保留字也有一个幸运的结果,对于类方法,您可以将第一个参数重命名为其他名称(通常是cls)。当然,对于静态方法,第一个参数与调用它的实例没有关系,例如:classA:defmethod
在django中,对于像ListView和DetailView这样基于类的View,方法像get()或post()或开发者定义的其他函数带参数包括self和request。我了解到在self中,这些实际上是一个self.request字段,那么self.request和request?例如,这是基于类的View中的函数,用于处理用户的登录要求:deflogin(self,request):name=request.POST['name']pwd=request.POST['password']user=authenticate(username=name,password=pwd)if
我只是在看functools.lru_cache的实现,当我偶然发现这个片段时:root=[]#rootofthecirculardoublylinkedlistroot[:]=[root,root,None,None]#initializebypointingtoself我熟悉循环和双向链表。我还知道new_list=my_list[:]创建了my_list的副本。在查找切片分配或循环双向链表的其他实现时,我找不到有关此特定语法的任何更多信息。问题:在这种情况下发生了什么。是否有不同的语法来实现相同的结果?some_list[:]是否有不同的常见用例=some_iterable(没有
这个问题在这里已经有了答案:Whycan'tIpassselfasanamedargumenttoaninstancemethodinPython?(1个回答)关闭8年前。>>>classPotato(object):...defmethod(self,spam):...printself,spam...>>>spud=Potato()作品:>>>Potato.method(spud,**{'spam':123})123不起作用:>>>Potato.method(**{'self':spud,'spam':123})#TypeError但为什么不呢?我认为“self”只是一种约定俗成,
我有一个包含以下代码的gui.py文件:fromjavax.swingimportJFrame,JPanel,Box,JComboBox,JSpinner,JButton,JLabel,SpinnerNumberModel,WindowConstantsfromjava.awtimportBoxLayout,GridLayoutclassSettingsWindow:defstart(self):selected=self.combobox.selectedIndexifselected>=0:self.map=self.map_list[selected]self.games=sel
为什么正是是A.__init__()B.__init__()D.__init__()由以下代码打印?特别是:为什么是C.__init__()未打印?为什么是C.__init__()如果我把super().__init__()打印出来而不是A.__init__(self)?#!/usr/bin/envpython3classA(object):def__init__(self):super(A,self).__init__()print("A.__init__()")classB(A):def__init__(self):A.__init__(self)print("B.__init__