The Unity Editor API classes are fairly similar, so it’s worth clarifying their use cases.
Property Drawer
A property drawer is used to create a custom field or create modifiers for a property field. For example, you could create a custom field for an object you frequently use or a Range modifier to limit the which ints or floats can be selected (that’s built actually in).
Editor
An editor is used to create an entire custom editor for a script. You can use this to add logic to your editor (like selectively showing or hiding fields based on settings), indirectly set values (like cast an int field to a string), or even an in editor ping-pong game.
Editor Window
An editor window is used to create a custom editor window. For example, the Ultimate Screenshot Tool and Ultimate Gif Tool create editor windows to take screenshots or create gifs. Editor windows can use multiple objects or scripts to create a behavior that is usually not tied to specific scenes or objects. The Inspector is an example of an Editor Window. You can re-use your Editors in Editor Windows with this trick.
Summary
Generally, the choice of which class to use just comes down to your use case.
Tl;DR: Property drawers are for properties, editors for whole scripts, and editor windows for anything bigger!
Thanks, is there a way to actually use the PropertyDrawers for a custom class in the OnGui of an EditorWindow?