Ì
Ìð¹Ï
Howdy everyone,
This is a big problem puzzles me for a long time. The core question is:
How to dynamically create methods on a class or an instance?
Let me state it step by step.
1.
def gunc(self):
pass
class A(object):
def func(self):
pass
a = A()
a.func # gives "bound method", type is "instancemethod"
A.func # gives "unbound method", type is "instancemethod"
gunc # gives "function", type if "function"
# ?? Does this line attach a method to instance? ... I don't think so.
a.gunc = gunc
I found stardard library 'new' may help. Is that right?
2.
a = A() # instance of old class A
# Do attach a new method to class A...
b = A() # instance of new class A
Does "a" can get the new method automatically?
Does new method have the *same* concept level with old methods?
Especially, if there
are classes inherit from class A, how does name resolution work on this case?
3.
How do I write a decroator for a method? Eg:
class A(object):
@my_dec
def func(self):
pass
Here, my_dec should return a method rathar than a function/lambda. Am I right?
What does @property @staticmethod... really do? I cannot step-into them for
source code.
4.
If most of above questions can be solved, then it would be easy to implement
the feature: "dynamic property attach".
Eg:
One class can read/store settings from/to some file based on
the file content.
# File: cfg.ini
x = 1
y = python
config = SettingClass('cfg.ini') # dynamically build up properties x and y.
x = config.x # x will be set to 1 (str -> int convertion would be
done by 'property x')
y = config.y # y will be set to 'python'
config.x = 9 # 'x = 9' is written to cfg.ini.
How to implement
^_^ Maybe there are some library does the same thing. What is it? How
to implement ?
Thank you for your attention!
This is a big problem puzzles me for a long time. The core question is:
How to dynamically create methods on a class or an instance?
Let me state it step by step.
1.
def gunc(self):
pass
class A(object):
def func(self):
pass
a = A()
a.func # gives "bound method", type is "instancemethod"
A.func # gives "unbound method", type is "instancemethod"
gunc # gives "function", type if "function"
# ?? Does this line attach a method to instance? ... I don't think so.
a.gunc = gunc
I found stardard library 'new' may help. Is that right?
2.
a = A() # instance of old class A
# Do attach a new method to class A...
b = A() # instance of new class A
Does "a" can get the new method automatically?
Does new method have the *same* concept level with old methods?
Especially, if there
are classes inherit from class A, how does name resolution work on this case?
3.
How do I write a decroator for a method? Eg:
class A(object):
@my_dec
def func(self):
pass
Here, my_dec should return a method rathar than a function/lambda. Am I right?
What does @property @staticmethod... really do? I cannot step-into them for
source code.
4.
If most of above questions can be solved, then it would be easy to implement
the feature: "dynamic property attach".
Eg:
One class can read/store settings from/to some file based on
the file content.
# File: cfg.ini
x = 1
y = python
config = SettingClass('cfg.ini') # dynamically build up properties x and y.
x = config.x # x will be set to 1 (str -> int convertion would be
done by 'property x')
y = config.y # y will be set to 'python'
config.x = 9 # 'x = 9' is written to cfg.ini.
How to implement
^_^ Maybe there are some library does the same thing. What is it? How
to implement ?
Thank you for your attention!