我正在尝试创建一个类似口袋妖怪的基于文本的游戏。它一直很顺利但是当我使用来自用户的字符串输入(移动是类)访问移动时我遇到了一个问题。将会有很多动作会被创建,但我实际上并不知道这是否会影响这种访问的完成方式。每当我运行我的代码或下面的类似代码时,我都会收到此错误。
what is a classname you want? myClass
Traceback (most recent call last):
File "main.py", line 11, in <module>
Main()
File "main.py", line 10, in Main
print(userClass.name)
AttributeError: 'str' object has no attribute 'name'
以下代码是我一直在使用的简化版本。
def Main():
class X():
name=""
myClass=X()
myClass.name="this"
userClass=str(input('what is a classname you want?'))
print(userClass.name)
Main()
更新: 我基于编辑更改了我使用的内容,但我仍然收到错误。这是代码:
def Main():
class X():
name=""
myClass=X()
myClass.name="this"
userClass = globals()[str(input('What is a class name you want?'))]
print(userClass.name)
Main()
这是我得到的错误:
What is a class name you want? myClass
Traceback (most recent call last):
File "python", line 10, in <module>
File "python", line 8, in Main
KeyError: 'myClass'
答案 0 :(得分:0)
您可以使用locals()
。以前,我建议使用globals()
。但是,myClass
不在全球范围内,因此globals()
不起作用。代码看起来像:
userClass = locals()[str(input('What is ...'))]
print(userClass.name)
尽管如此,我必须说,我相信他们是解决问题的更好方法。但是,这已经超出了这个问题的范围。
userClass
不是用户定义的类实例。在您的情况下,它不是类X
的实例。相反,它被声明为字符串。字符串没有name
属性。这就是造成你错误的原因。
您要做的是根据您的代码制作userClass
类X
的实例。
userClass = X()
要使用某些用户输入设置userClass
的{{1}}属性,您只需执行以下操作:
name
userClass.name = str(input('what is a classname you want?'))
print(userClass.name)
。AttributeError
将是userName
。函数名称以小写字母开头。user_name
内的变量name
是一个静态变量。这意味着,如果您有X
的多个实例,并且在X
的某个实例中为name
提供了新值,则所有其他实例的新值将为X
同样。答案 1 :(得分:0)
我最终想通了,我是通过使用词典来实现的。这是它背后的代码。
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Welcome extends CI_Controller {
/**
* Index Page for this controller.
*
* Maps to the following URL
* http://example.com/index.php/welcome
* - or -
* http://example.com/index.php/welcome/index
* - or -
* Since this controller is set as the default controller in
* config/routes.php, it's displayed at http://example.com/
*
* So any other public methods not prefixed with an underscore will
* map to /index.php/welcome/<method_name>
* @see https://codeigniter.com/user_guide/general/urls.html
*/
public function index()
{
$this->load->view('welcome_message');
}
public function test()
{
session_start();
$_SESSION['admin']="1";
$str =array("_SESSION"=>array("isadmin"=>"admin","user"=>"user1"));
extract($str);
print_r($_SESSION);
}
}