相关疑难解决方法(0)

Python函数重载

我知道Python不支持方法重载,但我遇到了一个问题,我似乎无法以一种漂亮的Pythonic方式解决这个问题.

我正在制作一个角色需要射击各种子弹的游戏,但是如何编写不同的功能来制作这些子弹呢?例如,假设我有一个函数可以创建一个以给定速度从A点到B点行进的子弹.我会写一个这样的函数:

    def add_bullet(sprite, start, headto, speed):
        ... Code ...
Run Code Online (Sandbox Code Playgroud)

但我想写其他功能来创建子弹,如:

    def add_bullet(sprite, start, direction, speed):
    def add_bullet(sprite, start, headto, spead, acceleration):
    def add_bullet(sprite, script): # For bullets that are controlled by a script
    def add_bullet(sprite, curve, speed): # for bullets with curved paths
    ... And so on ...
Run Code Online (Sandbox Code Playgroud)

等等有很多变化.有没有更好的方法来做到这一点,而不使用这么多的关键字参数导致它快速变得有点难看.重命名每个功能,因为你要么是非常糟糕过add_bullet1,add_bullet2add_bullet_with_really_long_name.

要解决一些问题:

  1. 不,我无法创建Bullet类层次结构,因为它太慢了.管理项目符号的实际代码在C中,我的函数是围绕C API的包装器.

  2. 我知道关键字参数,但检查各种参数组合变得烦人,但默认参数有助于分配 acceleration=0

python overloading

175
推荐指数
14
解决办法
20万
查看次数

如何在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万
查看次数

Python中的函数重载:缺失

如上所述:

http://web.archive.org/web/20090624083829/http://mail.python.org/pipermail/python-list/2003-May/206149.html

Python中没有函数重载.

据我所知,这也是一个很大的障碍,因为它也是一种OO语言.最初我发现无法区分参数类型很困难,但Python的动态特性使其变得容易(例如,列表,元组,字符串非常相似).

然而,计算传递的参数数量然后完成工作就像是一种矫枉过正.

python overloading missing-features

61
推荐指数
5
解决办法
10万
查看次数

多态如何在Python中工作?

我是Python的新手......并且来自大多数Java背景,如果它可以解释任何问题.

我正在尝试理解Python中的多态性.也许问题是我期待我已经知道的概念投射到Python中.但我把以下测试代码放在一起:

class animal(object):
    "empty animal class"

class dog(animal):
    "empty dog class"

myDog = dog()
print myDog.__class__ is animal
print myDog.__class__ is dog
Run Code Online (Sandbox Code Playgroud)

从我习惯的多态性(例如java的instanceof),我希望这两个语句都打印为true,因为dog的一个例子动物,也是一只狗.但我的输出是:

False
True
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

python polymorphism

59
推荐指数
3
解决办法
5万
查看次数

python中的方法重载

我需要调用unparameterised方法first,但也参数化first,但它给出了一个错误.

>>> class A:
...     def first(self):
...             print 'first method'
...     def first(self,f):
...             print 'first met',f
...
>>> a=A()
>>> a.first()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: first() takes exactly 2 arguments (1 given) 
Run Code Online (Sandbox Code Playgroud)

是否可以像在Java中一样在Python中执行方法重载?

python overloading

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

如何在python中运行两个while True语句?

我正在尝试使用Python为我的Raspberry Pi创建门刷卡系统。我将程序分为两部分:门禁警报和刷卡记录系统。这两个程序可以单独工作,但是如何将两个程序合并为一个python文件?我试过线程,但似乎无法正常工作。

以下是程序:1.)门警报:如果门在一定时间内保持打开状态,指示灯会闪烁,然后警报会响起

import time
import RPi.GPIO as gpio

led = 37
buzzer = 11
door = 16

gpio.setmode(gpio.BOARD)
gpio.setwarnings(False)
gpio.setup(buzzer, gpio.OUT)
gpio.setup(led, gpio.OUT)
gpio.setup(door, gpio.IN, pull_up_down=gpio.PUD_UP)


def blink(buzzer):
    gpio.output(buzzer, True)
    time.sleep(0.1)
    gpio.output(buzzer, False)
    time.sleep(0.1)
    return

def blink(led):
    gpio.output(led, True)
    time.sleep(1)
    gpio.output(led, False)
    time.sleep(1)
    return

while True:
    if gpio.input(door):
        time.sleep(3)
        for i in range(0,5):
                blink(led)
        for i in range (0,5):
                blink(buzzer)
    else:
        gpio.output(buzzer, False)

gpio.cleanup()      
Run Code Online (Sandbox Code Playgroud)

2.)刷卡记录系统:当某人刷卡时,指示灯闪烁并拍照

import datetime
import time
import os
import RPi.GPIO as gpio

led = 37
t …
Run Code Online (Sandbox Code Playgroud)

python raspberry-pi

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