A number is a property, so if you attach a series of number properties to every thing, you will use more memory than otherwise. If you are writing a small game and want to fit it into Z-machine constraints (i.e. get a .z5 or .z8 story file), this could matter, as it sounds like you would not be using many numbers for most things.
You can give properties to kinds that are more specific than “thing”, thus eliminating the need to store those properties where they’re not applicable. To use your examples:
[code]A thing has a number called Number1.
An animal has a number called Number2. An animal has a number called Number3.
A horse is a kind of animal. A horse has a number called Number4.
Field is a room. A wagon is in Field. An animal called a dog is in Field. A horse called Nelly is in Field.
Then you would find that the wagon, dog, and horse all have a Number1 property; the dog and horse have Number2 and Number3 properties but not the wagon; and only the horse has a Number4 property.
For your own sanity, you would probably also want to give the properties names specific to their use, so:
[code]A thing has a number called weight. [Number1]
An animal has a number called ferocity. [Number2] An animal has a number called speed. [Number3]
A horse is a kind of animal. A horse has a number called load capacity. [Number4]
Field is a room. A wagon is in Field. An animal called a dog is in Field. A horse called Nelly is in Field.[/code]
Default values for a number property will be zero unless you say otherwise, e.g.:
The ferocity of an animal is usually 4.