【问题标题】:Problems with Python OOPPython OOP 的问题
【发布时间】:2021-12-11 19:57:42
【问题描述】:

我决定自己研究python的OOP。在“car”类中,我创建了“carHP”函数,然后我想将这个函数的结果写入“power”变量,但是编译器抛出错误。可能是什么问题呢?我没有上课就写了,一切正常,但后来失去了OOP的意义

class car():
    nameCar=""

    def carHP(self):
        if self.nameCar=="BMW":
            HP=666
        return HP

    power=carHP()

    def infoCar(self):
        print("You owner: ", self.nameCar)
        print("HP car: ", self.power )

class person():
    namePerson=""
    def infoPerson(self):
        print("Ваше имя: ",self.namePerson)

person1=person()
person1.namePerson=input("Enter your name: ")

car1=car()
car1.nameCar=input("Enter car name: ")

person1.infoPerson()
car1.infoCar()

【问题讨论】:

  • 请添加错误信息!
  • 如果这辆车不是宝马,你认为carHP会做什么?它需要返回的值从哪里来?
  • 为了正确使用OOP范式,您需要了解类和实例之间的区别。从您的代码中,很明显您不了解其中的区别。

标签: python oop


【解决方案1】:

您需要了解python oop的基础知识,因为您使用的是类变量而不是实例变量,请研究两者的区别并简化逻辑

这是一个更好的开始方式

class Car:
    def __init__(self, car_name, car_hp=100):
        self.car_name = car_name
        self.car_hp = car_hp


class Person:
    def __init__(self, person_name):
        self.person_name = person_name

    def person_info(self):
        print(f"Person Name: {self.person_name}")

【讨论】:

    【解决方案2】:

    通过对您的代码进行一些调整,我发现了一些可以解决的问题。看看他们...

    我注意到您没有调用函数 carHP(),这在将 HP car: 初始化为 666 时可能很重要

    person1=person()
    person1.namePerson=input("Enter your name: ")
    
    car1=car()
    car1.nameCar=input("Enter car name: ")
    
    person1.infoPerson()
    car1.infoCar()
    

    其次,类方法内部的继承不会自动接收实例。他们需要自我。参数来接收它来自的方法的内容。否则,您将返回该变量的实例,但没有其父方法

    如果这没有意义,我深表歉意。但请查看https://docs.python.org/3/tutorial/classes.html 了解更多信息。

    添加 self 参数并调用函数作为条件语句,我们得到以下输出...

    class car:
        nameCar = ""
        power = None
    
        def carHP(self):
            if self.nameCar == "BMW":
                HP = 666
                self.power = HP # notice this change
    
        def infoCar(self):
            print("You owner: ", self.nameCar)
            print("HP car: ", self.power)
    
    
    class person():
        namePerson = ""
    
        def infoPerson(self):
            print("Ваше имя: ", self.namePerson)
    
    
    person1 = person()
    person1.namePerson = input(str("Enter your name: "))
    
    car1 = car()
    car1.nameCar = input(str("Enter car name: "))
    
    car1.carHP() # notice this change
    person1.infoPerson()
    car1.infoCar()
    

    输出:

    Enter your name: Name
    Enter car name: BMW
    Ваше имя:  Name
    You owner:  BMW
    HP car:  666
    
    Process finished with exit code 0
    

    【讨论】:

      猜你喜欢
      • 2014-07-18
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      • 2011-01-18
      • 2021-10-10
      • 2010-09-29
      • 1970-01-01
      相关资源
      最近更新 更多