Python Class 会员权限
Python Class member access
我是 python 的新手,正在努力学习。有人可以帮我解决一个简单的问题吗?我正在创建一个对象,如下所示:
def myList(list):
def __repr__(self):
return list.__repr__(self)
所以本质上只是一个列表。但是在输入列表之后,我想立即将其值加倍。即
当我使用
t = myList([1, 2, 3])
print(t)
它应该输出 [2, 4 ,6]
现在我知道如何将列表中的每个元素加倍,例如我可以使用
l = [x * 2 for x in l]
但我不确定如何在创建后立即访问 myList 对象的成员并将它们加倍。
您需要覆盖 __init__
以执行输入转换,然后再将其传递给 list
的 __init__
,例如使用列表理解或生成器表达式:
class myList(list):
def __init__(self, it=()):
super().__init__([x * 2 for x in it])
def __repr__(self):
return list.__repr__(self)
生成器表达式版本为 super().__init__(x * 2 for x in it)
;它避免了潜在的大临时list
,但通常会慢一点。
Side-note:这里根本不需要覆盖__repr__
;您自动从 list
继承了它,因此您也可以完全省略定义。只有当你想显示加倍,但存储原始值时,覆盖它才有意义,在这种情况下你想要:
class myList(list):
def __repr__(self):
return repr([x * 2 for x in self])
Edit: 因为OP要求初始化myList
的方法,然后将值加倍,你可以立即调用list
的初始化器,然后之后在 myList
上加倍。 myList
直到 __init__
returns 仍未完全初始化,并且它会变慢,但这将基础 list
初始化与加倍分开:
class myList(list):
def __init__(self, it=()):
super().__init__(it) # Perform list initialization with original values
# Cycle through values and double each one
for i, x in enumerate(self):
self[i] = x * 2
我是 python 的新手,正在努力学习。有人可以帮我解决一个简单的问题吗?我正在创建一个对象,如下所示:
def myList(list):
def __repr__(self):
return list.__repr__(self)
所以本质上只是一个列表。但是在输入列表之后,我想立即将其值加倍。即
当我使用
t = myList([1, 2, 3])
print(t)
它应该输出 [2, 4 ,6]
现在我知道如何将列表中的每个元素加倍,例如我可以使用
l = [x * 2 for x in l]
但我不确定如何在创建后立即访问 myList 对象的成员并将它们加倍。
您需要覆盖 __init__
以执行输入转换,然后再将其传递给 list
的 __init__
,例如使用列表理解或生成器表达式:
class myList(list):
def __init__(self, it=()):
super().__init__([x * 2 for x in it])
def __repr__(self):
return list.__repr__(self)
生成器表达式版本为 super().__init__(x * 2 for x in it)
;它避免了潜在的大临时list
,但通常会慢一点。
Side-note:这里根本不需要覆盖__repr__
;您自动从 list
继承了它,因此您也可以完全省略定义。只有当你想显示加倍,但存储原始值时,覆盖它才有意义,在这种情况下你想要:
class myList(list):
def __repr__(self):
return repr([x * 2 for x in self])
Edit: 因为OP要求初始化myList
的方法,然后将值加倍,你可以立即调用list
的初始化器,然后之后在 myList
上加倍。 myList
直到 __init__
returns 仍未完全初始化,并且它会变慢,但这将基础 list
初始化与加倍分开:
class myList(list):
def __init__(self, it=()):
super().__init__(it) # Perform list initialization with original values
# Cycle through values and double each one
for i, x in enumerate(self):
self[i] = x * 2