小编Eth*_*man的帖子

如何在Python中使用方法重载?

我试图在Python中实现方法重载:

class A:
    def stackoverflow(self):    
        print 'first method'
    def stackoverflow(self, i):
        print 'second method', i

ob=A()
ob.stackoverflow(2)
Run Code Online (Sandbox Code Playgroud)

但输出是second method 2; 类似的:

class A:
    def stackoverflow(self):    
        print 'first method'
    def stackoverflow(self, i):
        print 'second method', i

ob=A()
ob.stackoverflow()
Run Code Online (Sandbox Code Playgroud)

Traceback (most recent call last):
  File "my.py", line 9, in <module>
    ob.stackoverflow()
TypeError: stackoverflow() takes exactly 2 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)

我该如何工作?

python overloading class

147
推荐指数
13
解决办法
18万
查看次数

globals(),locals()和vars()之间有什么区别?

是什么区别globals(),locals()vars()?他们回报了什么?结果更新是否有用?

python

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

`staticmethod`和`abc.abstractmethod`:它会融合吗?

在我的Python应用程序中,我想创建一个既是a staticmethod又是a的方法abc.abstractmethod.我该怎么做呢?

我尝试应用两个装饰器,但它不起作用.如果我这样做:

import abc

class C(object):
    __metaclass__ = abc.ABCMeta

    @abc.abstractmethod
    @staticmethod    
    def my_function(): pass
Run Code Online (Sandbox Code Playgroud)

我得到一个异常*,如果我这样做:

class C(object):
    __metaclass__ = abc.ABCMeta

    @staticmethod    
    @abc.abstractmethod
    def my_function(): pass
Run Code Online (Sandbox Code Playgroud)

不强制执行抽象方法.

如何制作抽象静态方法?

*例外:

File "c:\Python26\Lib\abc.py", line 29, in abstractmethod
 funcobj.__isabstractmethod__ = True
AttributeError: 'staticmethod' object has no attribute '__isabstractmethod__'
Run Code Online (Sandbox Code Playgroud)

python abstract-class static-methods

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

Python地图对象不可订阅

为什么以下脚本会出错:

payIntList[i] = payIntList[i] + 1000
TypeError: 'map' object is not subscriptable

payList = []
numElements = 0

while True:
        payValue = raw_input("Enter the pay amount: ")
        numElements = numElements + 1
        payList.append(payValue)
        choice = raw_input("Do you wish to continue(y/n)?")
        if choice == 'n' or choice == 'N':
                         break

payIntList = map(int,payList)

for i in range(numElements):
         payIntList[i] = payIntList[i] + 1000
         print payIntList[i]
Run Code Online (Sandbox Code Playgroud)

python python-3.x

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

我应该返回None还是(None,None)?

我们有一个返回城市/州元组的对象方法,即('Boston', 'MA').在某些有效情况下,没有有效的城市/州返回.在风格上,返回更有意义None,还是(None, None)在这种情况下包含两元素元组?

python coding-style python-3.x

54
推荐指数
5
解决办法
3840
查看次数

如何扩展Python Enum?

什么是Enum在Python 3.4中扩展类型的最佳实践,是否有可能这样做?

例如:

from enum import Enum

class EventStatus(Enum):
   success = 0
   failure = 1

class BookingStatus(EventStatus):
   duplicate = 2
   unknown = 3

Traceback (most recent call last):
...
TypeError: Cannot extend enumerations
Run Code Online (Sandbox Code Playgroud)

目前没有可能的方法来创建一个带有成员的基本枚举类,并在其他枚举类中使用它(如上例所示).有没有其他方法来实现Python枚举的继承?

python enums python-3.x

42
推荐指数
7
解决办法
1万
查看次数

Python super()行为不可靠

出于某种原因,该super()方法并不总是按预期运行,选择返回:

TypeError('super(type, obj): obj must be an instance or subtype of type)'
Run Code Online (Sandbox Code Playgroud)

我理解错误的含义.我不明白为什么它会出现错误.这是破解的代码片段.系统中的所有对象都是新样式对象.

真正有趣的是,这个错误并不总是出现.我不知道是什么导致了它.该super()在方法Retrieval中传递Retrieval类,然后本身作为一个对象,它是,据我所知,究竟如何super()应该被调用.

有什么想法吗?

在文件DBConnection.py中:

class DBAdminConnection(object):
    def __init__(self):
        self.user = DBUserConnection().user 
        self.submissions = DBSubmissionConnection()
Run Code Online (Sandbox Code Playgroud)

在文件Retrieval.py中

class Retrieval(DBConnection.DBAdminConnection): 
    def __init__(self, username=None, password=None, unique_key=None):
        super(Retrieval,self).__init__()
        if username and password:
            self.username = username
            self.user.login(username,password, config.DATABASE)
            if self.user.error:
                raise UserLoginError(username)
        self.unique_key = unique_key
Run Code Online (Sandbox Code Playgroud)

python inheritance super superclass

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

UNC本地计算机上文件夹的路径

什么是本地计算机上文件夹的UNC路径,我该如何访问它?我试过了:

  1. 文件夹的安全性 - 设置为Everyone完全控制(暂时!)
  2. 共享权限 - 设置为Everyone完全控制(暂时!)

我可以在\中看到该文件夹​​,但无法进入(无法访问).

错误信息:

您可能没有权限使用此网络资源.请与此服务器的管理员联系,以了解您是否具有访问权限.无法访问网络位置.有关网络故障排除的信息,请参阅Windows帮助.

我的电脑未连接到网络.

windows networking

38
推荐指数
3
解决办法
19万
查看次数

如何检查对象是否是Python中的迭代器?

我可以检查一下next()方法,但这还够吗?有一种意识形态的方式吗?

python iterator

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

Py_INCREF/DECREF:何时

说明以下内容是正确的:

  • 如果在C函数中创建了Python对象,但该函数没有返回它,INCREF则不需要,但是a DECREF.

  • [false]如果函数确实返回了它,你需要INCREF在接收返回值的函数中.[/ false]

  • 当分配了C类型的变量作为属性,如double,int等等,给Python对象,没有INCREFDECREF需要.

  • 将Python对象作为属性分配给其他Python对象,如下所示:

    PyObject *foo;
    foo = bar // A Python object
    tmp = self->foo;
    Py_INCREF(foo);
    self->foo = foo;
    Py_XDECREF(tmp);
    //taken from the manual, but it is unclear if this works in every situation
    
    Run Code Online (Sandbox Code Playgroud)

编辑: - >我可以在任何情况下安全地使用它吗?(没有碰到一个导致我问题的地方)

  • Python对象的dealloc需要DECREF用于其作为属性的每个其他Python对象,但不适用于C类型的属性.

编辑

'C type as a attribute'是指bar和baz:

typedef struct {
    PyObject_HEAD
    PyObject *foo;
    int bar;
    double baz;
} FooBarBaz;
Run Code Online (Sandbox Code Playgroud)

python python-c-api

36
推荐指数
1
解决办法
1万
查看次数