python以下划线开头变量名的特点_属性d以下划线开头的变量

我是Python新手。所以,请原谅我,如果这是一个基本的问题。我在网上研究过这个话题,但是我找不到解释。我使用的是水蟒3.6分发版。在

我试图为属性创建一个简单的getter和setter。我会把我的错误告诉你。在class Person:

def __init__(self,name):

self.name=name

bob = Person('Bob Smith')

print(bob.name)

这将打印出我同意我没有重写print或getattribute方法的名字。而且,这里没有财产。这是为了测试基本代码是否有效。在

让我们修改代码以添加属性:

^{pr2}$

当我用PyCharm编写上面的代码时,我会看到一个黄色的灯泡图标,说明变量必须是私有的。我不明白理由。在

忽略上面的内容,如果我在上面运行代码,我会得到:Traceback (most recent call last): File "C:\..., in run_code

exec(code_obj, self.user_global_ns, self.user_ns) File "", line 2, in

bob = Person('Bob Smith') File "", line 4, in __init__

self.name=name AttributeError: can't set attribute

现在,我研究了这个主题,我发现有两种修复方法(不知道为什么会这样做):

修复1:将变量name更改为_nameclass Person:

def __init__(self,name):

self._name=name #Changed name to _name

@property

def name(self):

"name property docs"

print('fetch...')

return self._name #Changed name to _name

bob = Person('Bob Smith')

print(bob.name)

这很好地工作,因为它可以正确地打印输出。在

修复2:将属性名从name(self)改为_name(self),并将变量名从_name还原为nameclass Person:

def __init__(self,name):

self.name=name #changed to name

@property

def _name(self): #Changed to _name

"name property docs"

print('fetch...')

return self.name #changed to name

bob = Person('Bob Smith')

print(bob.name)

现在,这张照片和预期的一样。在

下一步,我使用decorator创建了setter、getter和{}属性。它们遵循与上述类似的命名约定——即变量名或方法名的前缀_:@_name.setter

def _name(self,value):

"name property setter"

print('change...')

self.name=value

@_name.deleter

def _name(self):

print('remove')

del self.name

bob = Person('Bob Smith')

print(bob.name)

bob.name = 'Bobby Smith'

print(bob.name)

del bob.name

问题:我不太清楚Python3.x为什么强制向变量名或方法名添加_。

所以,现在最大的问题是,为什么我需要使用下划线来处理属性?我相信这些下划线前缀只是为了让用户知道这是一个私有变量。在

我使用Lutz的书来学习Python,上面的例子是从他的书中得到启发的。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值