Python 对具有定义数量的参数的类使用多个构造函数
我正在尝试为Atom类实现一个替代构造函数。然而,我不知道如何在与_lammps不同的情况下获得一个只包含给定参数的对象 您可以实现一个只包含如下给定参数的替代构造函数。请注意,传递给classmethod的第一个参数是正在实例化的类Python 对具有定义数量的参数的类使用多个构造函数,python,python-3.x,class,Python,Python 3.x,Class,我正在尝试为Atom类实现一个替代构造函数。然而,我不知道如何在与_lammps不同的情况下获得一个只包含给定参数的对象 您可以实现一个只包含如下给定参数的替代构造函数。请注意,传递给classmethod的第一个参数是正在实例化的类 class Atom: def __init__(self,x,y,z,element,charge,notused,fx,fy,fz): self.x=float(x) self.y=float(y) se
class Atom:
def __init__(self,x,y,z,element,charge,notused,fx,fy,fz):
self.x=float(x)
self.y=float(y)
self.z=float(z)
self.element=str(element)
self.charge=float(charge)
self.notused=int(float(notused))
self.fx=float(fx)
self.fy=float(fy)
self.fz=float(fz)
@classmethod
def from_lammps(self,element,x,y,z):
self.x=float(x)
self.y=float(y)
self.z=float(z)
self.element=str(element)
输出:
瓦萨托姆1=
{'charge':3.1415,
“元素”:“锌”,
“fx”:4.0,
“fy”:5.0,
“fz”:6.0,
“未使用”:42,
“x”:1.0,
“y”:2.0,
“z”:3.0}
varsatom2=
{'element':'silver','x':6.0,'y':7.0,'z':8.0}
您是否检查过:为什么不使用**kwargs而不是参数列表?@maverick6912,它似乎再次调用init方法。无法将None与省略的参数与提供的参数相关联answer@fireball.1您读过这篇文章了吗?您想要的只是位置参数/参数?在呼叫签名中使用不同的顺序?
class Atom:
def __init__(self, x, y, z, element, charge, notused, fx, fy, fz):
self.x = float(x)
self.y = float(y)
self.z = float(z)
self.element = str(element)
self.charge = float(charge)
self.notused = int(float(notused))
self.fx = float(fx)
self.fy = float(fy)
self.fz = float(fz)
@classmethod
def from_lammps(cls, element, x, y, z):
obj = object.__new__(cls)
obj.x = float(x)
obj.y = float(y)
obj.z = float(z)
obj.element = str(element)
return obj
from pprint import pprint, pformat
atom1 = Atom(1, 2, 3, 'zinc', '3.1415', 42, '4', '5', '6')
print(f'vars(atom1) =\n{pformat(vars(atom1))}')
print()
atom2 = Atom.from_lammps('silver', '6', '7', '8')
print(f'vars(atom2) =\n{pformat(vars(atom2))}')