使用另一个类中的方法?

时间:2017-12-03 20:42:18

标签: python pygame

我正在尝试为我的游戏创建两个精灵,一个是$name= mysqli_real_escape_string($con,$_POST['name']); $password= mysqli_real_escape_string($con,$_POST['password']); $confirm= mysqli_real_escape_string($con,$_POST['confirm']); $first= mysqli_real_escape_string($con,$_POST['first']); $email= mysqli_real_escape_string($con,$_POST['email']); $hash = md5(rand(0,1000)); $mysql_get_users = mysqli_query("SELECT * FROM userInfo where name = '$name'"); if (empty($name)) { echo "Name is required\n"; } else if (mysqli_num_rows($mysql_get_users) > 0){ echo "Username already exists"; } else if (empty($password)){ echo "Password is required\n"; } else if (empty($confirm)){ echo "Please confirmed the password\n"; } else if (empty($first)){ echo "First name is required\n"; } else if (!preg_match("/^[a-zA-Z'-]+$/",$first)){ echo "First name should only contains letters"; } else if ($password != $confirm){ echo "Password does not match confirmation"; } else{ $sql = "INSERT INTO userInfo (name, password, first, email, hash) VALUES ('$name', '$password', '$first', '$email', '$hash')"; if(!mysqli_query($con, $sql)){ echo "Unable to save the data to the database."; } else{ echo "Your account has been made, a verification email has been sent to you."; $to = $email; $subject = 'Signup| Verification'; $message = ' Thank you for signing up! Your account has been created. Please click this link to activate your account: $headers = 'From:noreply@app.com' . "\r\n"; mail($to, $subject, $message, $headers); } } } mysqli_close($con); ?> ,另一个是Player1,因此它们具有非常相似的属性。我正在努力弄清楚我如何能够将Player2课程的所有方法用于我的Player1课程。

Player2

创建class Player2(pygame.sprite.Sprite): def __init__(self): Player1.__init__(self) self.rect.x = 400 self.walkImages = ["p2 walk/Run (1).png", "p2 walk/Run (2).png", "p2 walk/Run (3).png", "p2 walk/Run (4).png", "p2 walk/Run (5).png", "p2 walk/Run (6).png", "p2 walk/Run (7).png", "p2 walk/Run (8).png"] self.idleImages = ["p2 idle/Idle (1).png", "p2 idle/Idle (2).png", "p2 idle/Idle (3).png", "p2 idle/Idle (4).png", "p2 idle/Idle (5).png", "p2 idle/Idle (6).png", "p2 idle/Idle (7).png", "p2 idle/Idle (8).png", "p2 idle/Idle (9).png", "p2 idle/Idle (10).png"] def update(Player1, blocksGroup): pass 课程时,我会继承Player2。但是,使用我的更新方法,理论上它与Player1 s相同。我将如何使用Player1的方法进行更新?

以下是Player1的更新方法:

Player1

2 个答案:

答案 0 :(得分:3)

你还没有真正说过Player1Player2类是如何不同的,但假设你有充分的理由我建议创建一个名为{{的基类1}}并将其用作这两个其他类的基类。

这将使他们非常清楚地分享行为,并且只需要在每个子类的方法中实现差异。

我之所以说“假设你有充分的理由”有两个类的原因,是因为如果它们之间的唯一区别是它们包含的数据,例如,你不需要有两个类来做 - 相反,只需定义(单个)类的PlayerBase方法,使其接受提供此数据的参数,然后在必要时将其作为类实例数据通过__init__()参数存储,该参数默认传递给所有常规方法

维基百科关于 Objects and classes的文章中有一个标题为Object-oriented Programming (OOP)的部分,其中讨论了两者之间的差异,这些差异可能会让您更深入地了解何时应该使用其中一种做事。

答案 1 :(得分:0)

如果Player2继承自Player1update方法完全相同,则您无法为update定义Player2

在这种情况下,当update对象调用Player2时,它将使用Player1中的继承定义,self将引用Player2实例。