我想知道是否可以在python中向变量添加属性。例如,创建变量a=45
,然后添加类似units=m/s
谢谢。
答案 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)
直接int
或float
对象不支持属性。
使用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