当前位置:首页>python>Python面向对象编程练习 9 封装

Python面向对象编程练习 9 封装

  • 2026-09-02 19:17:47
Python面向对象编程练习 9 封装

练习55

实现一个名为Laptop的类,在__init__()方法中设置存储笔记本电脑价格的受保护属性price的值(不进行任何验证)。然后实现一个名为get_price()的方法来读取该属性,以及一个名为set_price()的方法来修改该属性(也不进行验证)。
然后创建一个价格为3499的Laptop类实例,并按以下步骤操作:
  • 使用get_price()方法将price受保护属性的值打印到控制台
  • 使用set_price()方法将price受保护属性的值设置为3999
  • 使用get_price()方法将price受保护属性的值打印到控制台
预期结果:
34993999

练习56

实现了Laptop类。实现一个名为set_price()的方法来修改price属性并进行验证。验证检查:
  • 值是否为int或float类型,如果不是则引发TypeError并显示以下消息:
'The price attribute must be an int or float type.'
  • 值是否为正数,如果不是则引发ValueError并显示以下消息:
'The price attribute must be a positive int or float value.'
然后创建一个价格为3499的Laptop类实例,并尝试使用set_price()方法将price设置为'3000'。如果引发错误,将错误消息打印到控制台。在解决方案中使用try...except...子句。
预期结果:
The price attribute must be an int or float type.
class Laptop:    def __init__(self, price):        self._price = price    def get_price(self):        return self._price

练习57

实现了Laptop类。__init__()方法设置存储笔记本电脑价格的受保护属性price的值(不进行任何验证)。
创建一个价格为3499的Laptop类实例,并尝试使用set_price()方法将price设置为-3000。如果引发错误,将错误消息打印到控制台。在解决方案中使用try...except...子句。
预期结果:
The price attribute must be a positive int or float value.
class Laptop:    def __init__(self, price):        self._price = price    def get_price(self):        return self._price    def set_price(self, value):        if not isinstance(value, (int, float)):            raise TypeError('The price attribute must be an int or float type.')        if not value > 0:            raise ValueError('The price attribute must be a positive int or '                           'float value.')        self._price = value

练习58

实现了Laptop类。
在创建实例阶段(__init__()方法中)也为price属性添加验证。
然后尝试创建一个价格为-3499的Laptop类实例。如果引发错误,将错误消息打印到控制台。在解决方案中使用try...except...子句。
预期结果:
The price attribute must be a positive int or float value.
class Laptop:    def __init__(self, price):        self._price = price    def get_price(self):        return self._price    def set_price(self, value):        if not isinstance(value, (int, float)):            raise TypeError('The price attribute must be an int or float type.')        if not value > 0:            raise ValueError('The price attribute must be a positive int or '                           'float value.')        self._price = value

练习59

实现一个名为Person的类,该类有一个受保护的实例属性first_name。接下来,实现一个get_first_name()方法,用于读取first_name受保护属性的值。然后,使用get_first_name()方法和property类(以标准方式)创建一个名为first_name的属性(只读属性)。
创建Person类的一个实例,并将first_name属性设置为'John'。将该实例的first_name属性值打印到控制台。
预期结果:
John

练习60

实现一个名为Person的类,该类有两个受保护的实例属性,分别名为first_name和last_name。然后实现get_first_name()和get_last_name()方法,分别读取first_name和last_name受保护属性。
然后,使用get_first_name()和get_last_name()方法以及property类(以标准方式)创建两个名为first_name和last_name的属性(只读属性)。
创建Person类的一个实例,并设置以下属性:
  • first_name设置为值'John'
  • last_name设置为值'Dow'
将该实例的first_name和last_name属性值打印到控制台。
预期结果:
JohnDow

练习61

实现一个名为Person的类,该类有两个受保护的实例属性,分别名为first_name和last_name。然后实现get_first_name()和get_last_name()方法,分别读取first_name和last_name受保护属性。
然后,使用get_first_name()和get_last_name()方法以及property类(以标准方式)创建两个名为first_name和last_name的属性(只读属性)。
创建Person类的一个实例,并将first_name属性设置为'John'。然后,使用set_first_name()方法设置新值'Mike'。
作为响应,将first_name属性的值打印到控制台。
预期结果:
Mike

练习62

实现一个名为Person的类,该类有两个受保护的实例属性,分别名为first_name和last_name。然后实现get_first_name()和get_last_name()方法,分别读取first_name和last_name受保护属性。
然后,使用get_first_name()和get_last_name()方法以及property类(以标准方式)创建两个名为first_name和last_name的属性(只读属性)。
使用以下值创建Person类的一个实例:
  • first_name = 'John'
  • last_name = 'Dow'
然后按如下所示将这些属性的值打印到控制台。
使用点符号修改该实例的属性值,分别为:
  • first_name改为值'Tom'
  • last_name改为值'Smith'
作为响应,将创建的实例的__dict__属性打印到控制台。
预期结果:
JohnDow{'_first_name': 'Tom', '_last_name': 'Smith'}
class Person:    def __init__(self, first_name, last_name):        self._first_name = first_name        self._last_name = last_name    def get_first_name(self):        return self._first_name    def set_first_name(self, value):        self._first_name = value    def get_last_name(self):        return self._last_name    def set_last_name(self, value):        self._last_name = value    first_name = property(fget=get_first_name, fset=set_first_name)    last_name = property(fget=get_last_name, fset=set_last_name)person = Person('John', 'Dow')print(person.first_name)print(person.last_name)person.first_name = 'Tom'person.last_name = 'Smith'print(person.__dict__)

练习63

实现了Person类。
实现del_first_name()方法以删除first_name受保护属性。
然后,使用get_first_name()、set_first_name()、del_first_name()方法和property类(以标准方式)创建一个名为first_name的属性(用于读取、修改和删除的属性)。
创建Person类的一个名为person的实例,并将'Tom'赋值给first_name。使用del_first_name()方法删除person实例的first_name属性。将person实例的__dict__属性显示到控制台。
预期结果:
{}
class Person:    def __init__(self, first_name):        self._first_name = first_name    def get_first_name(self):        return self._first_name    def set_first_name(self, value):        self._first_name = value

练习64

实现一个名为Pet的类,该类有一个受保护的实例属性name。然后实现一个name()方法,用于读取受保护的name属性的值。
使用@property装饰器创建一个name属性(只读)。
创建Pet类的一个名为pet的实例,并将name属性设置为'Max'。作为响应,打印该实例的__dict__属性内容。
预期结果:
{'_name': 'Max'}

练习65

实现一个名为Pet的类,该类有两个受保护的实例属性:name和age。接下来实现name()和age()方法,分别读取受保护的name和age属性的值。
使用@property装饰器分别创建name和age属性(只读属性)。
创建Pet类的一个名为pet的实例,并将name属性设置为'Max',age设置为5。
作为响应,将pet实例的__dict__属性内容打印到控制台。
预期结果:
{'_name': 'Max', '_age': 5}

练习66

实现一个名为Pet的类,该类有一个受保护的实例属性name。然后,使用@property装饰器创建一个name属性(用于读取和修改,不进行验证)。
创建Pet类的一个名为pet的实例,并将name属性设置为'Max'。然后,使用点符号将name属性的值修改为'Oscar'。
作为响应,打印该实例的__dict__属性内容。
预期结果:
{'_name': 'Oscar'}

练习67

实现一个名为Pet的类,该类有一个受保护的实例属性name。然后,使用@property装饰器创建一个name属性(用于读取和修改,不进行验证)。
使用名称pet和以下属性创建Pet类的一个实例:
  • name = 'Max'
  • age = 5
将pet实例的__dict__属性打印到控制台。然后使用点符号修改属性:
  • name改为值'Tom'
  • age改为值8
再次将pet实例的__dict__属性打印到控制台。
预期结果:
{'_name': 'Max', '_age': 5}{'_name': 'Tom', '_age': 8}

练习68

实现了Pet类,该类有两个属性:name和age(见下文)。在对象创建和属性修改阶段为age属性添加验证:
age属性的值必须是int类型,否则引发TypeError并显示以下消息:
'The value of age must be of type int.'
age属性的值必须是正数,否则引发ValueError并显示以下消息:
'The value of age must be a positive integer.'
然后尝试使用以下值创建Pet类的一个名为pet的实例:
  • 'Max'
  • 'seven'
如果有错误,将错误消息打印到控制台。在解决方案中使用try...except...子句。
预期结果:
The value of age must be of type int.
class Pet:    def __init__(self, name, age):        self._name = name        self._age = age    @property    def name(self):        return self._name    @name.setter    def name(self, value):        self._name = value    @property    def age(self):        return self._age    @age.setter    def age(self, value):        self._age = value

练习69

实现了Pet类,该类有两个属性:name和age(见下文)。使用名称pet和以下属性值创建Pet类的一个实例:
  • 'Max'
  • 7
然后尝试将age属性的值修改为-10。如果有错误,将此错误消息打印到控制台。在解决方案中使用try...except...子句。
预期结果:
The value of age must be a positive integer.
class Pet:    def __init__(self, name, age):        self._name = name        self.age = age    @property    def name(self):        return self._name    @name.setter    def name(self, value):        self._name = value    @property    def age(self):        return self._age    @age.setter    def age(self, value):        if not isinstance(value, int):            raise TypeError('The value of age must be of type int.')        if not value > 0:            raise ValueError('The value of age must be a positive integer.')        self._age = valuepet = Pet('Max', 7)try:    pet.age = -10except TypeError as error:    print(error)except ValueError as error:    print(error)

练习70

实现一个名为TechStack的类,该类有一个受保护的实例属性tech_names。然后,使用@property装饰器创建一个tech_names属性(读取、修改和删除属性,不进行验证)。
创建该类的一个名为tech_stack的实例,并设置tech_names属性值:
  • 'python,java,sql'
打印tech_names属性的内容。然后,将此属性修改为值:
  • 'python,sql'
也将tech_names属性的内容打印到控制台。
删除tech_stack实例的tech_names属性。
将tech_stack实例的__dict__属性内容打印到控制台。
预期结果:
python,java,sqlpython,sql{}

练习71

实现一个名为Game的类,该类有一个名为level的属性(读取和修改属性,默认为0)。level属性的值应该是[0, 100]范围内的整数。在实例创建和属性修改阶段添加验证。如果值不是int类型,引发TypeError并显示以下消息:
'The value of level must be of type int.'
如果值超出[0, 100]范围,设置超出范围的边界值(分别为0或100)。然后创建一个名为games的列表,包含四个Game类的实例:
games= [Game(), Game(10), Game(-10), Game(120)]
遍历games列表并打印每个实例的level属性值。
预期结果:
0100100

最新文章

随机文章