2 回答
TA贡献1777条经验 获得超10个赞
namedtuples
:
返回一个名为 typename 的新元组子类。新的子类用于创建类似元组的对象,这些对象具有可通过属性查找访问的字段,并且是可索引和可迭代的。子类的实例还有一个有用的文档字符串(带有 typename 和 field_names)和一个有用的repr () 方法,它以 name=value 格式列出元组内容。
与typing
:
该模块支持 PEP 484 和 PEP 526 指定的类型提示。最基本的支持包括类型 Any、Union、Tuple、Callable、TypeVar 和 Generic。有关完整规范,请参阅 PEP 484。有关类型提示的简化介绍,请参阅 PEP 483。
键入 NamedTuples 只是原始 namedtuples 的包装。
2.需要实例才能使用instancemethods:
两者的修复:
import telnetlib
from collections import namedtuple
def printunit(self, unit):
print(unit.name)
print(unit.ip)
print(unit.port)
Unit = namedtuple("Unit","name ip port")
Unit.printunit = printunit
class TnCnct:
Server1 = Unit("Server1", "1.1.1.1", "23")
Server2 = Unit("Server2", "2.2.2.2", "23")
Server3 = Unit("Server3", "3.3.3.3", "23")
def __init__(self):
pass
def cnct(self, u):
try:
tn = telnetlib.Telnet(u.ip, u.port, 10)
tn.open(u.ip, u.port)
tn.close()
response = u.name + " " + "Success!"
except Exception as e:
response = u.name + " " + "Failed!"
print(e)
finally:
print(response)
# create a class instance and use the cnct method of it
connector = TnCnct()
connector.cnct(TnCnct.Server1)
TA贡献1824条经验 获得超6个赞
cnct
是一种需要对象实例的方法。在这里,您尝试将其称为类方法。如果这是你想要的,你应该使用装饰器:
@classmethod def cnct(cls, u): ...
添加回答
举报