Python是否支持类中的前向声明?

时间:2018-08-27 16:17:12

标签: python python-3.x

    <?php
    $user_name ="root";
    $user_pass="";
    $host_name="localhost";
    $db_name="snap_wallet";

    $con = mysqli_connect($user_name ,$user_pass,$host_name,$db_name;) or die('Unable to connect to database server');
    if($con)
    {
        $image=$_POST["image"];
        $name=$_POST["name"];
        $sql="insert into images(name) values ('$name')";
        $upload_path="uploads/$name.jpg";
        if(mysqli_query($con,$sql))
        {
            file_put_contents($upload_path,base64_decode($image));
            echo json_encode(array('response'->'Image Uploaded Succesfully..'));
        }
        else
        {
            echo json_encode(array('response'->'Image Upload Failed...'))
        }
    }
    else
    {
        echo json_encode(array('response'->'Image Upload Failed...'))
    }
    mysqli_close($con);
    ?>

我想制作游戏,但是这段代码给了我以下错误:

# animal.py
class Animal:
    def __init__(self):
        self.action = {'feed':feed_pet}

    def do_action(self, a):
        action[a]()

    def feed_pet(self):
        print('Gives some food')

# main.py
from animal import *
my_pet = Animal()
my_pet.do_action('feed')

Python中没有像C一样的前向声明吗?

4 个答案:

答案 0 :(得分:5)

问题是您不了解python类,您所指的是全局范围的名称feed_pet,但您打算在该类中调用该函数,因为您需要使用self,检查以下更改:

class Animal:
    def __init__(self):
        self.action = {'feed':self.feed_pet}

    def do_action(self, a):
        self.action[a]() //use self also for access instance attributes

    def feed_pet(self):
        print('Gives some food')

# main.py
from animal import *
my_pet = Animal()
my_pet.do_action('feed')

为清楚起见, Python是否支持类中的前向声明?

在python中不需要前向声明,与C不同,您可以根据需要重新定义任意对象多次,python会将最后一个对象保留为活动对象。另外,由于它在编译时没有静态类型,因此可以将任何变量用作任何类型,因此无需声明任何内容即可使用它,只是在运行时必须处于同一作用域内。

答案 1 :(得分:3)

使用self.action = {'feed': self.feed_pet}来引用绑定实例函数。

没有全局名称feed_pet

答案 2 :(得分:0)

您在两个引用中均未激活所需的对象。没有通用功能feed_pet或变量action。有 个实例方法-因此您必须在每个引用(调用)中提供实例。下面的代码解决了单行输出“给些食物”的问题。请注意在我向通话中添加了self.两个地方。

# animal.py

class Animal:
    def __init__(self):
        self.action = {'feed': self.feed_pet}   #  Add "self"

    def do_action(self, a):
        self.action[a]()   #  Add "self"

    def feed_pet(self):
        print('Gives some food')

此外,请注意,这里没有声明,只有函数 definition 中隐含的一个。 Python只需要您在调用函数之前就定义好该函数。

答案 3 :(得分:0)

首先要弄清一些基本概念:
1. self参数是指向类实例的引用。(像在c ++中一样)
2.通过使用self,我们可以访问类的属性和方法。
在您的代码中,您引用了全局范围变量和方法。 使用自指针引用类变量和方法。
例如self.action = {'feed':self.feed_pet}