python - 是否不可能将实例变量作为方法关键字的默认值传递?
问题描述
这将不起作用:
class myClass:
def __init__(self, name):
self.name = name
def methodA(self, name=self.name):
print(f"Hello {name}!")
myInstance = myClass("Frank")
因为:
NameError: name 'self' is not defined
问题
- 这是为什么?是
self.name
不是在类的初始化时就已经定义了? - 有没有办法
name
在类实例的初始化时定义,同时在调用特定方法时也能改变它的值?myInstance.name = "Peter"
在调用方法之前,我不想总是用单独的行(例如:)更改它的值。而且,我也不想被迫使用关键字传递它(例如:def methodB(self, name=name_typed_when_calling_method)
每次我调用使用该变量的方法时。
解决方案
self
在评估默认参数时未定义,即在定义方法时。它只是一个函数参数,在调用方法时会绑定到一个参数。
您需要做的是使用标记(如)作为默认值,并在None
定义的方法体内检查该标记。self
class myClass:
def __init__(self, name):
self.name = name
def methodA(self, name=None):
if name is None:
name = self.name
print(f"Hello {name}!")
myInstance = myClass("Frank")
推荐阅读
- scala - akka-persistence-cassandra 从元数据表中读取太多
- amazon-web-services - 如何读取名称中带有加号和空格的存储桶中的对象
- vba - 用于填充 word doc 并确定打开的下一个表单的用户表单复选框
- mongodb - MongoDB 日志轮换
- reporting-services - 具有多个总和的 SSRS IIF
- regex - 为什么 grep 懒惰地匹配我的正则表达式?
- database - powershell 辅助数据提取
- javascript - 删除不在节点列表中工作的类
- java - 反转用户在Java中输入的字符串
- powershell - 通过 powershell 以管理员身份启动 msiexec