oop.txt Basic Python-like OOP supportLINK
==============================================================================
CONTENTS oop-contentsLINK
1. Intro oop-intro
2. Functionality provided oop-functionality
2.1. Features oop-features
2.2. Resources oop-resources
2.3. Built-in classes oop-classes
3. Class members oop-classinstance
==============================================================================
1. Intro oop-introLINK
This plugin provides some basic OOP support with OOP model similar to Python.
Plugin requires frawor.
==============================================================================
2. Functionality provided oop-functionalityLINK
------------------------------------------------------------------------------
2.1. Features oop-featuresLINK
oop-f-pyoopLINK
oop-f-pyoop.classLINK
pyoop.class : function (name, functions[, vars[, parents]])
+ unload
Defines a new class with given name, class functions (dictionary
{{fname}: {fref}}) and class variables (dictionary) (see
oop-__variables__ for how they then can be accessed). List {parents}
is used to inherit functions and variables, it must contain a number
of class names. Function will fail if class with requested name was
already defined in this plugin or in one of its dependencies.
Feature `pyoop' additionally contains three functions: `register' which will
add _classes variable to s: dictionary (it is frawor-fk-ignoredeps feature),
`load' which will populate _classes dictionary with classes defined by
dependencies of the plugin and `unload' which will remove defined classes when
plugin is unloaded.
oop-newLINK
To get an instance for particular class Foo you should use
let instance=s:_classes.Foo.new(arg1, arg2, ...)
This will pass variables arg1, arg2, ... to constructor (see oop-__init__).
Note that you must set self to class dictionary. In the above example it is
done by vim, if you want to use call() instead, use
let instance=call(s:_classes.Foo.new, [arg1, ...], s:_classes.Foo)
------------------------------------------------------------------------------
2.2. Resources oop-resourcesLINK
oop-r-pyoopLINK
See frawor-f-addresource for information about how resource is obtained.
pyoop.instanceof :: name, instance -> Bool oop-r-pyoop.instanceofLINK
Returns true if {instance} is an instance of class {name}.
------------------------------------------------------------------------------
2.3. Built-in classes oop-classesLINK
Exception oop-class-ExceptionLINK
Basic class for custom exceptions. Functions:
warn oop-Exception.warnLINK
Generates error message using __str__ method and echoes it with
hl-ErrorMsg higlighting. Returns echoed error message. Note that
this warning will not be caught by :try ... :catch blocks.
raise oop-Exception.raiseLINK
Invokes oop-Exception.warn and then throws generated error message.
__str__ oop-Exception.__str__LINK
Returns basic error message. Should be redefined in child classes.
==============================================================================
3. Class members oop-classinstanceLINK
When you request new class instance the following steps are performed.
1. New dictionary with keys __class__ and __variables__ is generated.
2. Generated dictionary is extended with parent classes variables (if any).
3. Generated dictionary is extended with its class variables (but before the
dictionary with varibles is generated by deepcopy(): one copy for every
instance).
4. Generated dictionary is extended with its class functions. Note that
functions from parent classes are inherited when class is registered.
5. Constructor is called with generated dictionary as a self dictionary.
6. Generated dictionary is returned.
All class members may have following special methods/variables:
__class__ oop-__class__LINK
Defined for all instances, contains class dictionary.
__variables__ oop-__variables__LINK
Defined for all instances, contains class variables. Unlike instance
variables, redefining variables in this dictionary will lead to
changing class variables default values (but not the values of already
existing class instances). Changing instance variables will affect
neither existing nor new class instances.
__init__({super}, ...) oop-__init__LINK
If defined, this method will be called whenever new instances are
generated. {super} argument is a dictionary with either a parent
class methods (if there is only one parent) or with {{name}:
{methods}} pairs. Other arguments are passed from oop-new.
vim: ft=help:tw=78