是否可以在python中向变量添加属性?

时间:2014-11-29 04:35:03

标签: python

我想知道是否可以在python中向变量添加属性。例如,创建变量a=45,然后添加类似units=m/s

的标签或属性

谢谢。

5 个答案:

答案 0 :(得分:3)

由于python中没有像C中那样的结构,我们可以使用类或字典来实现它。

类方法:

class Variables:
    def __init__(self):
        self.value = 25
        self.unit = "m/s"

字典方法:

var1 = {'value': 25, 'unit': 'm/s'}

答案 1 :(得分:2)

因为它是你想要实现的任意数据类型,所以通过类会更有帮助。通过这样做,您可以自由地对实例进行数学运算

模板将是:

 class Speed(object):
    def __init__(self, value, unit="m/s"):
        self.magnitude = value
        self.unit = unit

并且您希望使用类

中的方法实现matmtaical操作

答案 2 :(得分:2)

直接intfloat对象不支持属性。

使用Python 3+,您可以考虑使用函数annotations

>>> def kinetic_energy(m:'in KG', v:'in M/S')->'Joules': 
>>>    return 1/2*m*v**2
...            
>>> x=kinetic_energy(3,4)
>>> print(x, kinetic_energy.__annotations__['return'])     
24.0 Joules
>>> kinetic_energy.__annotations__
{'m': 'in KG', 'v': 'in M/S', 'return': 'Joules'}

答案 3 :(得分:1)

您可以使用属性作为单位和值来创建类。 另一个可能的解决方案是使用字典

{a: 'm/s', b: 'm^2'}

或两个列表是否可以出现重复值

myVars = [a, b, 100, d] myUnits = ['m/s', 'm^2', 's', 'm'] 然后myResult = str(myVars [0])+ str(myUnits [0])

答案 4 :(得分:1)

这取决于变量的类型。如果它是自定义类的实例,那么您可以,但如果它是内置类或扩展类的实例,那么您是否可以执行它取决于实现。

在许多情况下,您可以通过从给定的类派生自己的类来解决这个问题 - 例如:

class MyInt(int):
    pass

i = MyInt(21)
i.units= 'm/s'

print(i.units)  # --> m/s
print(i*2)      # --> 42

这种方法的优点是,在大多数情况下,您可以在接受/期望基类的任何地方使用派生类实例 - 如在算术表达式中使用i的最后一行所示。但请注意,如果没有向派生类添加一些其他方法,则表达式i*2的结果将是int,而不是MyInt

对于只想要像单位这样的简单单个属性的特殊情况,您可以派生出代表可能性的不同类,然后使用isinstance()来确定值的单位:

class MetersPerSecond(float):
    pass

v = MetersPerSecond(2.3)
print('isinstance(v, MetersPerSecond): {}'.format(
        isinstance(v, 
                   MetersPerSecond)))  # --> isinstance(v, MetersPerSecond): True