【问题标题】:Python OOP Sub class prints parent class methods then its own methods [duplicate]Python OOP子类打印父类方法然后打印它自己的方法[重复]
【发布时间】:2017-10-30 10:21:48
【问题描述】:

我有两个 python 文件,第一个我有父类。我用子类创建了一个新文件。当我运行子类文件时,父类文件中的方法首先运行子类。

父类是这样的

class human():
def __init__ (self, gender="", age=0, height=0, howHigh=""):
    #setting attributes
    self.gender = ""
    self.age = 0
    self.height = 0
    self.howHigh = ""


def setHeight(self):
    self.height = int(input("What is your height in cm? "))

def setGender(self):
    self.gender = input("What is your gender? ")

def setAge(self):
    self.age = int(input("What is your age? "))

def changeHeight(self):
    if self.height < 80:
        self.howHigh = "Small"
        print("Your hieght is small!")

    elif self.height >= 80 and self.height < 180:
        self.howHigh = "Medium"
        print("Your hieght is medium!")

    elif self.height >= 180:
        self.howHigh = "Large"
        print("Your hieght is tall")

human1 = human()
human1.setHeight()
human1.setGender()
human1.setAge()
print("human gender is ", human1.gender)
print("Human age is", human1.age)
print("Human height is", human1.height)
human1.changeHeight()
print(human1.howHigh)
human1 = human()
human1.setHeight()
human1.setGender()
human1.setAge()
print("human gender is ", human1.gender)
print("Human age is", human1.age)
print("Human height is", human1.height)
human1.changeHeight()
print(human1.howHigh)

子类文件是这样的

from human_class import *
class child(human):
def __init__(self):
    super().__init__()

def setHeight(self):
    self.height = int(input("What is your height in cm? "))


def changeHeight(self):
    if self.height < 30:
        self.howHigh = "Small"
        print("Your hieght is small for a child!")

    elif self.height >= 30 and self.height < 120:
        self.howHigh = "Medium"
        print("Your hieght is medium for a child!")

    elif self.height >= 120:
        self.howHigh = "Large"
        print("Your hieght is tall for a child!")


child1 = child()
child1.setHeight()
child1.changeHeight()
print(child1.howHigh)

代码如下,当我运行父类文件时,人工运行。 当我运行第二个文件时,子类,然后是类 human() 的方法,然后是类 child(human) 的方法。 我想要的是运行子类文件并且只运行那些方法。 有可能吗,我大部分时间都是这样做的?

感谢您的帮助

【问题讨论】:

  • 所有当你import它时,“父文件”中的代码将被执行。如果您不希望执行类定义下方的代码,请不要将其放入该文件中。 (或使用if __name__ == '__main__': ... 使其有条件。)

标签: python oop


【解决方案1】:

是的,这是可能的,这就是inheritance in Python 所做的。正如@deceze 建议的那样,更新如下文件:

human_class.py:

class human():
    def __init__ (self, gender="", age=0, height=0, howHigh=""):
        #setting attributes
        self.gender = ""
        self.age = 0
        self.height = 0
        self.howHigh = ""


    def setHeight(self):
        self.height = int(input("What is your height in cm? "))

    def setGender(self):
        self.gender = input("What is your gender? ")

    def setAge(self):
        self.age = int(input("What is your age? "))

    def changeHeight(self):
        if self.height < 80:
            self.howHigh = "Small"
            print("Your hieght is small!")

        elif self.height >= 80 and self.height < 180:
            self.howHigh = "Medium"
            print("Your hieght is medium!")

        elif self.height >= 180:
            self.howHigh = "Large"
            print("Your hieght is tall")

if __name__ == '__main__':
    human1 = human()
    human1.setHeight()
    human1.setGender()
    human1.setAge()
    print("human gender is ", human1.gender)
    print("Human age is", human1.age)
    print("Human height is", human1.height)
    human1.changeHeight()
    print(human1.howHigh)
    human1 = human()
    human1.setHeight()
    human1.setGender()
    human1.setAge()
    print("human gender is ", human1.gender)
    print("Human age is", human1.age)
    print("Human height is", human1.height)
    human1.changeHeight()
    print(human1.howHigh)

chlid_class.py:

from human_class import *
class child(human):
    def __init__(self):
        super().__init__()

    def setHeight(self):
        self.height = int(input("What is your height in cm? "))


    def changeHeight(self):
        if self.height < 30:
            self.howHigh = "Small"
            print("Your hieght is small for a child!")

        elif self.height >= 30 and self.height < 120:
            self.howHigh = "Medium"
            print("Your hieght is medium for a child!")

        elif self.height >= 120:
            self.howHigh = "Large"
            print("Your hieght is tall for a child!")


child1 = child()
child1.setHeight()
child1.changeHeight()
print(child1.howHigh)

if __name__ == '__main__': 有什么作用? 来自official documentation

'__main__' 是顶级代码执行的范围的名称。当从标准输入、脚本或交互式提示中读取时,模块的 __name__ 设置为等于 '__main__'

if __name__ == "__main__":
    # execute only if run as a script

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    相关资源
    最近更新 更多