用Python写,class Person: def __init__(self): self.__name = '' self.__sex = '' def SetValue(self, n, s): self.__name = n self.__sex = s def Display(self): print("姓名:", self.__name) print("性别:", self.__sex) # 测试代码 r = Person() r.SetValue('张三', '男') r.Display()
时间: 2024-04-28 10:23:19 浏览: 184
这段代码定义了一个名为 Person 的类,该类包含一个构造函数 __init__ 和两个方法 SetValue 和 Display。构造函数初始化了两个私有变量 __name 和 __sex,SetValue 方法用于设置两个私有变量的值,而 Display 方法用于打印出两个私有变量的值。
在测试代码中,首先创建了一个 Person 类的实例 r,然后调用 SetValue 方法设置了 r 对象的 __name 和 __sex 变量的值,最后调用 Display 方法打印出 __name 和 __sex 的值,输出结果为:
姓名: 张三
性别: 男
相关问题
class Person: def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex def getSex(self): return self.sex class Teacher(Person): def __init__(self, name, age, sex, course, salary): Person.__init__(self, name, age, sex) self.course = course self.salary = salary def getSex1(self): super().getSex() p1 = Teacher("Anna", 30, "woman", "English", 8000) print(p1.getSex1()) 为什么输出None
输出为None的原因是因为在getSex1方法中,没有返回super().getSex()的返回值。在Python中,如果函数没有明确的返回语句,则默认返回None。所以,当调用p1.getSex1()时,返回的就是None。要修正这个问题,可以在getSex1方法中添加return语句,将super().getSex()的返回值返回出来。例如:
```python
def getSex1(self):
return super().getSex()
```
这样,调用p1.getSex1()就会返回"woman",而不是None。
class Person: def __init__(self, name=None, age=0,sex=None): self.name = name self.age=age self.sex=sex def input_info(self, name, age,sex): self.name=name self.age=age self.sex=sex def __str__(self): return f"人员信息:\n姓名:{self.name}\n年龄:{self.age}\n性别:{self.sex}\n" class Worker(Person): def __init__(self, name=None, age=0,sex=None,t=None,grade=0 ): super().__init__(name, age,sex) self.t=t self.grade=grade # 方法重载:通过默认参数实现 def input_info(self, name, age, sex,t,grade): super().input_info(name,age,sex) self.t=t self.grade=grade def calculate_salary(self): if self.grade>=10: return 10000 elif 8<=self.grade<10: return 8000 else: return 5000 def __str__(self): return f"工人信息:\n姓名:{self.name}\n年龄:{self.age}\n性别:{self.sex}\n工种:{self.t}\n等级:{self.grade}" class Engineer(Person): def __init__(self, name=None, age=0, sex=None, major=None,grade1=None, honor=None): super().__init__(name, age,sex) self.major=major self.grade1=grade1 self.honor=honor # 重载父类方法,增加参数 def input_info(self, name,age,sex,major,grade1,honor ): super().input_info(name,age,sex ) self.major=major self.grade1=grade1 self.honor=honor # 重写薪酬计算方法 def calculate_salary(self): if self.grade1=="硕士"or self.honor=="高工": return 10000 else: return 8000 def __str__(self): return f"工程师信息:\n姓名:{self.name}\n年龄:{self.age}\n性别:{self.sex}\n专业:{self.major}学位:{self.grade1}职称:{self.honor}" 、如果上述的公司还需要录用一个技术主管(能够管理工程师团队),这个职位除了能够除了能够做其他工程师的工作,还有权限查询所管辖的所有工程师的相关信息,并假设录用了一个名叫马涛、35岁、男性、电子工程专业毕业并具有硕士学位和高级工程师职称的技术主管,现在他要查询自己的信息和工资待遇,并查询现有工程师的信息,请扩展上述代码实现功能。 根据以上代码和题目要求编写python代码
<think>嗯,用户让我扩展已有的Python代码,添加一个技术主管的类,这个主管需要能管理工程师团队,并且能查询所有工程师的信息。首先,我得仔细看看现有的代码结构。现有的类有Person作为基类,Worker和Engineer作为子类。现在需要创建的是技术主管类,应该继承自Engineer,因为主管也是工程师的一种,同时具备管理功能。
首先,技术主管类应该叫TechManager,继承自Engineer。这样它就能复用Engineer的属性和方法,比如专业、学位、职称等。然后,需要添加管理工程师团队的功能,比如添加工程师、查询所有工程师的信息。所以,TechManager类中需要有一个列表来存储所管辖的工程师对象。接下来,构造函数的问题。由于Engineer的构造函数需要major、grade1、honor等参数,所以TechManager的__init__方法应该调用父类的构造函数,并初始化自己的属性,比如团队列表。super().__init__应该传递必要的参数,比如name,age,sex,major,grade1, honor。然后,self.team= []来初始化团队。然后,添加管理方法,比如add_engineer,用来将工程师添加到团队中。这个方法接收一个Engineer实例,并添加到self.team列表里。另外,需要重写calculate_salary方法,因为技术主管的工资可能比普通工程师更高。根据题目描述,主管的工资可能在工程师基础上增加管理津贴。比如,原来的工程师如果满足硕士或高工,工资是10000,否则8000。主管的话,可以在这个基础上加2000。所以,在TechManager的calculate_salary中,先调用父类的方法得到基本工资,然后加上津贴。
然后,查询团队信息的方法,比如display_team,遍历self.team列表,打印每个工程师的信息。这里可能需要调用每个工程师的__str__方法,或者直接打印对象,因为__str__已经被定义。
测试部分,用户要求创建一个名为马涛的主管,35岁,男性,电子工程专业,硕士,高工。然后他要查询自己的信息和工资,并查询现有工程师的信息。所以需要实例化TechManager,然后调用他的方法。现有代码中的Engineer类在__str__方法中可能存在格式问题,比如"专业:{self.major}学位:{self.grade1}职称:{self.honor}",这里缺少换行或者空格,可能需要调整,比如改成“专业:{self.major}\n学位:{self.grade1}\n职称:{self.honor}”这样显示更清晰。
另外,在测试时,需要创建几个Engineer实例,添加到主管的团队中,然后调用display_team方法显示他们的信息。比如:engineer1= Engineer()engineer1.input_info("李四",28,"男", "计算机","硕士", "工程师")manager.add_engineer(engineer1)然后,当调用manager.display_team()时,会遍历并打印每个工程师的信息。
需要注意的是,TechManager的__str__方法可能需要覆盖,以正确显示主管的信息,比如在继承Engineer的__str__基础上,加上职位信息。或者直接使用Engineer的__str__,因为主管本身就是工程师的一种,可能不需要额外信息,除非有特别需要。另外,用户提到主管可以查询自己的信息和工资,所以直接打印manager对象,并调用calculate_salary方法即可。在代码实现中,可能还需要检查Engineer类的calculate_salary方法是否正确。原来的代码中是:
ifself.grade1=="硕士"orself.honor=="高工":return10000else:return8000这里可能存在运算符优先级的问题,应该写成self.grade1 =="硕士" orself.honor== "高工",但原代码中的条件是否正确?比如,grade1是学位,而honor是职称,高工可能对应更高的工资。而主管的工资计算应基于这个,然后加上津贴。
综上,代码扩展步骤大致如下:1.创建TechManager类,继承自Engineer。
2.在TechManager中添加团队列表和相关方法。3.重写calculate_salary方法。4.添加显示团队的方法。
5.测试实例化主管,添加工程师,显示信息和工资。</think>以下是扩展后的代码实现:
```python
class Engineer(Person):
# ...原有代码保持不变...
def __str__(self):
return f"工程师信息:\n姓名:{self.name}\n年龄:{self.age}\n性别:{self.sex}\n专业:{self.major}\n学位:{self.grade1}\n职称:{self.honor}"
class TechManager(Engineer):
def __init__(self, name=None, age=0, sex=None, major=None, grade1=None, honor=None):
super().__init__(name, age, sex, major, grade1, honor)
self.team = [] # 存储管辖的工程师团队
def add_engineer(self, engineer):
"""添加工程师到管理团队"""
if isinstance(engineer, Engineer):
self.team.append(engineer)
else:
raise TypeError("只能添加Engineer类型的对象")
def calculate_salary(self):
"""重写薪资计算方法,增加管理津贴"""
base_salary = super().calculate_salary()
return base_salary + 2000 # 增加2000元管理津贴
def display_team(self):
"""显示团队所有工程师信息"""
print(f"=== {self.name}管辖的工程师团队 ===")
for idx, engineer in enumerate(self.team, 1):
print(f"工程师 #{idx}:")
print(engineer)
print("-" * 30)
# 测试代码
if __name__ == "__main__":
# 创建技术主管
manager = TechManager()
manager.input_info("马涛", 35, "男", "电子工程", "硕士", "高工")
# 创建测试工程师
engineer1 = Engineer()
engineer1.input_info("李四", 28, "男", "计算机", "硕士", "工程师")
engineer2 = Engineer()
engineer2.input_info("王芳", 32, "女", "机械工程", "博士", "高工")
# 添加工程师到团队
manager.add_engineer(engineer1)
manager.add_engineer(engineer2)
# 查询自身信息
print("=== 技术主管信息 ===")
print(manager)
print(f"薪资待遇:{manager.calculate_salary()}元")
# 查询团队信息
print("\n")
manager.display_team()
```
代码解释:
1. `TechManager`类继承自`Engineer`,继承了工程师的所有特性
2. 新增`team`属性用于存储管理团队的工程师对象
3. `add_engineer`方法确保只能添加Engineer类型的对象
4. 重写`calculate_salary`方法在基础薪资上增加2000元管理津贴
5. `display_team`方法遍历输出团队所有工程师的详细信息
6. 测试代码演示了创建技术主管、组建团队、查询信息和薪资的全过程
阅读全文
相关推荐


















