阅读下面的程序,判断其是否可以正常运行,如果可以运行则写出执行结果,如果不能运行则写出理由。 |
class Test: |
def init( self , value): |
self .__value = value |
@property |
def value( self ): |
return self .__value |
t = Test( 3 ) |
t.value = 5 |
print (t.value) |
不能 |
1 类中定义方法时,方法名称前后需要加上两个下划线,表示这是一个类方法,所以初始化方法应该是 __init__,而不是 init。 |
2 在类方法中访问类的属性时,需要使用 self 关键字,表示这个属性属于这个对象,所以应该是 self .__value,而不是 __value。 |
3 类的属性通常使用两个下划线作为前缀,表示这个属性是私有属性,不能直接访问。但是在 Python 中,私有属性可以通过对象名._类名__属性名的方式来访问,因此这段代码中 t.value = 5 这行代码会把属性值修改为 5 。 |
4 类中定义的属性是可以直接通过对象名.属性名的方式访问的,但是这段代码中定义了一个名为 value 的方法,并使用了 @ property 装饰器,这表示这个方法可以通过属性的方式来访问。因此在执行 t.value = 5 时,会将这个方法视为属性进行赋值,这是不合法的,会导致错误。 |
修改后 |
class Test: |
def __init__( self , value): |
self .__value = value |
@property |
def value( self ): |
return self .__value |
t = Test( 3 ) |
print (t.value) |