Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
import имяфайла
имяфайла.run_claim()
import Module
-- ...
xxx = Module.function_name
Тут тоже ООП? Или в чем отличие от Python?print(1 + 2)
xxx = Module.function_name
from types import ModuleType
class(ModuleType):
...
function_name.newattr = xxx
attrib1="a1"
attrib2="a2"
def method1():
print("a1")
def method2():
print("a2")
def _private():
print("private")
from a import *
def method2():
print("b2")
def method3():
print("b3")
attrib2="b2"
method1()
method2()
method3()
print(attrib1, attrib2)
_private()
a1
b2
b3
a1 b2
Traceback (most recent call last):
File "b.py", line 17, in <module>
_private()
NameError: name '_private' is not defined
a.method1 = another_method, то b.method1 никак не изменится.dct.update(another_dict)lst[:] = another_listfrom a import *». У автора такого нет. Наличие возможности использования ООП тем или иным способам не делает любой код использующим ООП. Я, к примеру, могу написать пачку классов видаfrom math import acos, atan, sin, cos
class CoordCartezian:
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
def distance(self, c2):
return ((self.x-c2.x)**2 + (self.y-c2.y)**2 + (self.z-c2.z)**2) ** 0.5
def spherical(self):
r = (self.x*self.x + self.y*self.y + self.z*self.z) ** 0.5
return CoordSpherical(
r,
acos(self.z/r),
atan(self.y/self.x)
)
class CoordSpherical:
def __init__(self, r, t, p):
self.r = r
self.t = t
self.p = p
def angle(self, c2):
return acos(sin(self.t)*sin(self.p)*sin(c2.t)*sin(c2.p) + sin(self.t)*cos(self.p)*sin(c2.t)*cos(c2.p) + cos(self.t)*cos(c2.t))
def cartezian(self):
return CoordCartezian(
self.r * sin(self.t) * cos(self.p),
self.r * sin(self.t) * sin(self.p),
self.r * cos(self.t)
)
Вы от этого класс-объекта можете наследоваться и так далее.
In [1]: import itertools
In [2]: class MyItertools(itertools):
...: pass
...:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-2-8cefe4e16e35> in <module>()
----> 1 class MyItertools(itertools):
2 pass
TypeError: Error when calling the metaclass bases
module.__init__() takes at most 2 arguments (3 given)
Ваш функциональный «наблюдатель» отличается от объектного только переносом состояния в область глобальных переменных.
Позвольте поправить. Не следует путать функциональщину с процедурщиной.
UPD: упс. Не посмотрел, что статья 2013 года. Привет из будущего
Подписываем наши функции на рассылки:
>>> subscribe('insertors', fun)
>>> subscribe('insertors', bar)
Паттерны проектирования без ООП