对具有定义数量的参数的类使用多个构造函数

2024-05-16 04:09:20 发布

您现在位置:Python中文网/ 问答频道 /正文

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)

我正在尝试为Atom类实现一个替代构造函数。但是,我不知道如何在from_lammps()中做不同的操作,以获得仅具有给定参数的对象


Tags: fromselfinitdefelementfloatclassatom
1条回答
网友
1楼 · 发布于 2024-05-16 04:09:20

您可以实现一个只包含如下给定参数的替代构造函数。请注意,传递给classmethod的第一个参数是正在实例化的类

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))}')

输出:

vars(atom1) =
{'charge': 3.1415,
 'element': 'zinc',
 'fx': 4.0,
 'fy': 5.0,
 'fz': 6.0,
 'notused': 42,
 'x': 1.0,
 'y': 2.0,
 'z': 3.0}

vars(atom2) =
{'element': 'silver', 'x': 6.0, 'y': 7.0, 'z': 8.0}

相关问题 更多 >