首页 > 试题广场 >

为了以下程序能够正常运行,①处可以填入的语句是() clas

[单选题]

为了以下程序能够正常运行,①处可以填入的语句是()

class Animal:

    def __init__(self,color):

        self.__color = color

    @property

    def color(self):

        return self.__color

    @①

    def color(self,color):

        self.__color = color

animal = Animal('red')

print(animal.color)

animal.color = 'white'

print(animal.color)

  • property

  • setter

  • color.setter

  • setter.color

property装饰器可以安全的改变函数的属性,利用装饰器的特性,就可以生成装饰器函数下方一样命名的变量,改变该函数就可以采用该函数名.setter;除此之外还有getter,和delter;注意getter的使用一定要在setter和delter之前
发表于 2022-01-04 15:25:57 回复(0)
<p>看不懂</p>
发表于 2021-12-24 15:00:18 回复(7)
链接:https://www.nowcoder.com/questionTerminal/a618e2fbca69459a8cadc561902cfe07
来源:牛客网

既要保护类的封装特性,又要让开发者可以使用“对象.属性”的方式操作操作类属性,除了使用 property() 函数,Python 还提供了 @property 装饰器。通过 @property 装饰器,可以直接通过方法名来访问方法,不需要在方法名后添加一对“()”小括号。

@property 的语法格式如下:
@property
def 方法名(self)
    代码块

例如,定义一个矩形类,并定义用 @property 修饰的方法操作类中的 area 私有属性,代码如下:
class Rect:
    def __init__(self,area):
        self.__area = area
    @property
    def area(self):
        return self.__area
rect = Rect(30)
#直接通过方法名来访问 area 方法
print("矩形的面积是:",rect.area)
运行结果为:
矩形的面积为: 30

上面程序中,使用 @property 修饰了 area() 方法,这样就使得该方法变成了 area 属性的 getter 方法。需要注意的是,如果类中只包含该方法,那么 area 属性将是一个只读属性。

也就是说,在使用 Rect 类时,无法对 area 属性重新赋值,即运行如下代码会报错:
rect.area = 90
print("修改后的面积:",rect.area)
运行结果为:
Traceback (most recent call last):
  File "C:\Users\mengma\Desktop\1.py", line 10, in <module>
    rect.area = 90
AttributeError: can't set attribute


而要想实现修改 area 属性的值,还需要为 area 属性添加 setter 方法,就需要用到 setter 装饰器,它的语法格式如下:
@方法名.setter
def 方法名(self, value):
    代码块

例如,为 Rect 类中的 area 方法添加 setter 方法,代码如下:
@area.setter
def area(self, value):
    self.__area = value
再次运行如下代码:
rect.area = 90
print("修改后的面积:",rect.area)
运行结果为:
修改后的面积: 90

这样,area 属性就有了 getter 和 setter 方法,该属性就变成了具有读写功能的属性。

除此之外,还可以使用 deleter 装饰器来删除指定属性,其语法格式为:
@方法名.deleter
def 方法名(self):
    代码块

例如,在 Rect 类中,给 area() 方法添加 deleter 方法,实现代码如下:
纯文本复制
@area.deleter
def area(self):
    self.__area = 0
然后运行如下代码:
del rect.area
print("删除后的area值为:",rect.area)
运行结果为:
删除后的area值为: 0
发表于 2022-09-14 15:41:05 回复(0)

python中的@*.setter装饰器可以总结为两个作用:

  1. 对要存入的数据进行预处理
  2. 设置可读属性(不可修改)

注意:@*.setter装饰器必须在@property装饰器的后面,且两个被修饰的函数的名称必须保持一致,* 即为函数名称。

发表于 2022-03-21 08:53:10 回复(0)
@preperty 装饰器使得类有了一个方法同名属性color
通过 @color.setter  @color.getter  这类装饰器装饰的方法则可以被调用,对color属性进行修改
发表于 2022-03-18 21:22:55 回复(0)
运行期,能动态为实例添加属性
使用@property可以实现将类方法转换为只读属性(如果有返回值,相当于getter),同时可以自定义setter、getter、deleter方法(@对应属性名.seter)
发表于 2022-05-23 23:52:58 回复(0)
发表于 2021-12-09 21:21:22 回复(0)
python对于setter装饰器的语法是:@方法名.setter
编辑于 2024-04-12 17:51:06 回复(0)
property装饰器,表示私有属性
发表于 2022-05-07 10:50:03 回复(0)
Preperty装饰之后可以接同名的.setter装饰器
发表于 2022-04-13 23:49:41 回复(0)
C
发表于 2022-02-13 21:56:03 回复(0)
【看这里】

在Python中,以双下划线开头的属性是私有的,这意味着它们不能从类的外部直接访问。这是一种封装,目的是为了隐藏类的内部实现细节,使得外部代码不能直接修改内部状态,保证了数据的完整性。

为了让外部代码能够访问和修改这些私有属性,我们通常会定义公开的方法,即getter(获取属性值)和setter(设置属性值)方法。在Python中,@property装饰器和相应的@属性名.setter装饰器可以很方便地为我们创建这些方法。

发表于 2023-10-13 12:20:10 回复(0)
没看懂装饰器的作用
发表于 2023-02-02 14:09:25 回复(0)
受教
发表于 2022-12-08 11:56:26 回复(0)
记录
发表于 2022-11-22 21:04:32 回复(0)
才开始学,请问竞赛有一部分是题库的题吗
发表于 2022-05-06 23:45:05 回复(0)
看不懂
发表于 2022-03-09 21:02:43 回复(0)
看不懂 too
发表于 2022-03-02 22:30:01 回复(0)