python 下划线变量_python – 以属性修饰符的下划线开头的变量

我是

Python的新手.所以,如果这是一个基本问题,请原谅我.我在互联网和SO上研究过这个话题,但我找不到解释.我正在使用Anaconda 3.6发行版.

我正在尝试为属性创建一个简单的getter和setter.我将引导你完成我得到的错误.

class Person:

def __init__(self,name):

self.name=name

bob = Person('Bob Smith')

print(bob.name)

这打印出我同意的第一个名字,我没有覆盖print或getattribute方法.此外,这里没有房产.这是为了测试基本代码是否有效.

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

class Person:

def __init__(self,name):

self.name=name

@property

def name(self):

"name property docs"

print('fetch...')

return self.name

bob = Person('Bob Smith')

print(bob.name)

一旦我在PyCharm中编写上面的代码,我就会得到一个黄色的灯泡图标,说明该变量必须是私有的.我不明白其理由.

忽略上面,如果我运行上面的代码,我得到:

06002

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

修复#1:将变量名称更改为_name

class 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:将属性名称从名称(self)更改为_name(self),并将变量名称从_name恢复为name

class 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)

现在,这可以按预期打印.

下一步,我使用装饰器创建了setter,getter和deleter属性.它们遵循如上所述的类似命名约定 – 即.前缀_到变量名称或方法名称:

@_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

问题:我不确定为什么Python 3.x强制将_添加到变量名称或方法名称.

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

我正在使用Lutz的书来学习Python,上面的例子来自他的书.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值