Python OOP 问题

Problems with Python OOP

我决定自学python的OOP。在“car”class中,我创建了“carHP”函数,然后我想将这个函数的结果写入“power”变量,但是编译器抛出错误。可能是什么问题呢?我没有写class,一切正常,但是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()

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

这里有一个更好的开始方式

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}")

通过对您的代码进行一些调整,我发现了一些对我有用的东西。检查它们...

我注意到您没有调用 carHP() 函数,该函数在初始化 HP 汽车时可能很重要:至 666

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

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

person1.infoPerson()
car1.infoCar()

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

如果这没有意义,我深表歉意。但请查看 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