不能控制全局或局部变量的赋值,但可以重写类对象属性的赋值。下面是一个使用setattr来强制类型的类。它有一个方法来分配静态类型(例如使用int而不是int()),并且还可以在变量第一次赋值时分配类型。它对类型非常严格,但可以更改以允许继承类型。在class BabySitter(object):
def __init__(self):
object.__setattr__(self, "_types", {})
# if you want static assignment
def set_type(self, name, _type):
self._types[name] = _type
def __setattr__(self, name, value):
_type = self._types.get(name)
if _type:
if type(value) is not _type: # or `if not isinstance(value, _type)`
raise ValueError(
"BabySitter type conflict assigning '{}': was {} is {}".format(
name, _type, type(value)))
# if you want dynamic assignment
else:
self._types[name] = type(value)
object.__setattr__(self, name, value)
var = BabySitter()
var.set_type("x", int) # static "x" declared as integer
var.set_type("y", float) # static "y" declared as float
var.z = 123 # dynamic "z" int because of first assignment
var.x = 5 # "x" assigned an integer
var.y = 2.75 # "y" assigned a float
print(var.x) # prints "5"
print(var.y) # prints "2.75"
var.x = var.y # <== exception is raised
print(var.x) # prints 2.75