diff --git a/.gitignore b/.gitignore index 68bc17f..2dc53ca 100644 --- a/.gitignore +++ b/.gitignore @@ -157,4 +157,4 @@ cython_debug/ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. -#.idea/ +.idea/ diff --git a/class_test/class.ipynb b/class_test/class.ipynb new file mode 100644 index 0000000..6142bec --- /dev/null +++ b/class_test/class.ipynb @@ -0,0 +1,827 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "id": "726843f4-99a4-41bc-8d93-af525dc038a3", + "metadata": { + "ExecuteTime": { + "end_time": "2023-06-15T08:01:53.459031800Z", + "start_time": "2023-06-15T08:01:53.428235200Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": "'Clay'" + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "2023" + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": ">" + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hi!\n" + ] + }, + { + "data": { + "text/plain": "__main__.Golem" + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "str" + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "int" + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "method" + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "method" + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.core.interactiveshell import InteractiveShell\n", + "InteractiveShell.ast_node_interactivity = \"all\"\n", + "import datetime\n", + "\n", + "class Golem:\n", + "\n", + " def __init__(self, name=None):\n", + " self.name = name\n", + " self.built_year = datetime.date.today().year\n", + "\n", + " def say_hi(self):\n", + " print('Hi!')\n", + "\n", + "g = Golem('Clay')\n", + "g.name\n", + "g.built_year\n", + "g.say_hi\n", + "g.say_hi()\n", + "type(g)\n", + "type(g.name)\n", + "type(g.built_year)\n", + "type(g.__init__)\n", + "type(g.say_hi)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "outputs": [ + { + "data": { + "text/plain": ">" + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Can't you see? I'm running...\n" + ] + }, + { + "data": { + "text/plain": "'Clay'" + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "2023" + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hi!\n" + ] + } + ], + "source": [ + "from IPython.core.interactiveshell import InteractiveShell\n", + "InteractiveShell.ast_node_interactivity = \"all\"\n", + "import datetime\n", + "\n", + "class Golem:\n", + "\n", + " def __init__(self, name=None):\n", + " self.name = name\n", + " self.built_year = datetime.date.today().year\n", + "\n", + " def say_hi(self):\n", + " print('Hi!')\n", + "\n", + "class Running_Golem(Golem):\n", + "\n", + " def run(self):\n", + " print(\"Can't you see? I'm running...\")\n", + "\n", + "rg = Running_Golem('Clay')\n", + "\n", + "rg.run\n", + "rg.run()\n", + "rg.name\n", + "rg.built_year\n", + "rg.say_hi()" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2023-06-15T08:06:54.529442700Z", + "start_time": "2023-06-15T08:06:54.509561100Z" + } + } + }, + { + "cell_type": "code", + "execution_count": 5, + "outputs": [ + { + "data": { + "text/plain": ">" + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Can't you see? I'm running...\n" + ] + }, + { + "data": { + "text/plain": "'Clay'" + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "2023" + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hi! Nice day, Huh?\n" + ] + } + ], + "source": [ + "from IPython.core.interactiveshell import InteractiveShell\n", + "InteractiveShell.ast_node_interactivity = \"all\"\n", + "import datetime\n", + "\n", + "class Golem:\n", + "\n", + " def __init__(self, name=None):\n", + " self.name = name\n", + " self.built_year = datetime.date.today().year\n", + "\n", + " def say_hi(self):\n", + " print('Hi!')\n", + "\n", + "class Running_Golem(Golem):\n", + "\n", + " def run(self):\n", + " print(\"Can't you see? I'm running...\")\n", + "\n", + " def say_hi(self):\n", + " print('Hi! Nice day, Huh?')\n", + "\n", + "rg = Running_Golem('Clay')\n", + "\n", + "rg.run\n", + "rg.run()\n", + "rg.name\n", + "rg.built_year\n", + "rg.say_hi()" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2023-06-15T08:08:02.232573600Z", + "start_time": "2023-06-15T08:08:02.142092Z" + } + } + }, + { + "cell_type": "code", + "execution_count": 6, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Help on Running_Golem in module __main__ object:\n", + "\n", + "class Running_Golem(Golem)\n", + " | Running_Golem(name=None)\n", + " | \n", + " | Method resolution order:\n", + " | Running_Golem\n", + " | Golem\n", + " | builtins.object\n", + " | \n", + " | Methods defined here:\n", + " | \n", + " | run(self)\n", + " | \n", + " | say_hi(self)\n", + " | \n", + " | ----------------------------------------------------------------------\n", + " | Methods inherited from Golem:\n", + " | \n", + " | __init__(self, name=None)\n", + " | Initialize self. See help(type(self)) for accurate signature.\n", + " | \n", + " | ----------------------------------------------------------------------\n", + " | Data descriptors inherited from Golem:\n", + " | \n", + " | __dict__\n", + " | dictionary for instance variables (if defined)\n", + " | \n", + " | __weakref__\n", + " | list of weak references to the object (if defined)\n", + "\n" + ] + }, + { + "data": { + "text/plain": "['__class__',\n '__delattr__',\n '__dict__',\n '__dir__',\n '__doc__',\n '__eq__',\n '__format__',\n '__ge__',\n '__getattribute__',\n '__getstate__',\n '__gt__',\n '__hash__',\n '__init__',\n '__init_subclass__',\n '__le__',\n '__lt__',\n '__module__',\n '__ne__',\n '__new__',\n '__reduce__',\n '__reduce_ex__',\n '__repr__',\n '__setattr__',\n '__sizeof__',\n '__str__',\n '__subclasshook__',\n '__weakref__',\n 'built_year',\n 'name',\n 'run',\n 'say_hi']" + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "{'name': 'Clay', 'built_year': 2023}" + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "True" + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.core.interactiveshell import InteractiveShell\n", + "InteractiveShell.ast_node_interactivity = \"all\"\n", + "import datetime\n", + "\n", + "class Golem:\n", + "\n", + " def __init__(self, name=None):\n", + " self.name = name\n", + " self.built_year = datetime.date.today().year\n", + "\n", + " def say_hi(self):\n", + " print('Hi!')\n", + "\n", + "class Running_Golem(Golem):\n", + "\n", + " def run(self):\n", + " print('Can\\'t you see? I\\'m running...')\n", + "\n", + " def say_hi(self):\n", + " print('Hi! Nice day, Huh?')\n", + "\n", + "rg = Running_Golem('Clay')\n", + "\n", + "help(rg)\n", + "dir(rg)\n", + "rg.__dict__\n", + "hasattr(rg, 'built_year')" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2023-06-15T08:09:48.581157600Z", + "start_time": "2023-06-15T08:09:48.562887800Z" + } + } + }, + { + "cell_type": "code", + "execution_count": 8, + "outputs": [ + { + "data": { + "text/plain": "True" + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "True" + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "False" + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "False" + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "False" + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "1" + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "10" + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "11" + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "10" + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "10" + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "True" + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.core.interactiveshell import InteractiveShell\n", + "InteractiveShell.ast_node_interactivity = \"all\"\n", + "import datetime\n", + "\n", + "class Golem:\n", + " population = 0\n", + " __life_span = 10\n", + "\n", + " def __init__(self, name=None):\n", + " self.name = name\n", + " self.built_year = datetime.date.today().year\n", + " self.__active = True\n", + " Golem.population += 1\n", + "\n", + " def say_hi(self):\n", + " print('Hi!')\n", + "\n", + " def cease(self):\n", + " self.__active = False\n", + " Golem.population -= 1\n", + "\n", + " def is_active(self):\n", + " if datetime.date.today().year - self.built_year >= Golem.__life_span:\n", + " self.cease()\n", + " return self.__active\n", + "\n", + "g = Golem()\n", + "hasattr(Golem, 'population')\n", + "hasattr(g, 'population')\n", + "hasattr(Golem, '__life_span')\n", + "hasattr(g, '__life_span')\n", + "hasattr(g, '__active')\n", + "Golem.population\n", + "setattr(Golem, 'population', 10)\n", + "Golem.population\n", + "x = Golem()\n", + "Golem.population\n", + "x.cease()\n", + "Golem.population\n", + "getattr(g, 'population')\n", + "g.is_active()" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2023-06-15T08:18:02.767773400Z", + "start_time": "2023-06-15T08:18:02.712793300Z" + } + } + }, + { + "cell_type": "code", + "execution_count": 11, + "outputs": [ + { + "data": { + "text/plain": ">" + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "1" + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.core.interactiveshell import InteractiveShell\n", + "InteractiveShell.ast_node_interactivity = \"all\"\n", + "import datetime\n", + "\n", + "class Golem:\n", + " __population = 0\n", + " __life_span = 10\n", + "\n", + " def __init__(self, name=None):\n", + " self.name = name\n", + " self.built_year = datetime.date.today().year\n", + " self.__active = True\n", + " Golem.__population += 1\n", + "\n", + " def say_hi(self):\n", + " print('Hi!')\n", + "\n", + " def cease(self):\n", + " self.__active = False\n", + " Golem.__population -= 1\n", + "\n", + " def is_active(self):\n", + " if datetime.date.today().year - self.built_year >= Golem.__life_span:\n", + " self.cease()\n", + " return self.__active\n", + "\n", + " def population(self):\n", + " return Golem.__population\n", + "\n", + "g = Golem('Clay')\n", + "g.population\n", + "g.population()" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2023-06-15T08:24:16.538713500Z", + "start_time": "2023-06-15T08:24:16.524642600Z" + } + } + }, + { + "cell_type": "code", + "execution_count": 13, + "outputs": [ + { + "data": { + "text/plain": "" + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.core.interactiveshell import InteractiveShell\n", + "InteractiveShell.ast_node_interactivity = \"all\"\n", + "import datetime\n", + "\n", + "class Golem:\n", + " __population = 0\n", + " __life_span = 10\n", + "\n", + " def __init__(self, name=None):\n", + " self.name = name\n", + " self.built_year = datetime.date.today().year\n", + " self.__active = True\n", + " Golem.__population += 1\n", + "\n", + " def say_hi(self):\n", + " print('Hi!')\n", + "\n", + " def cease(self):\n", + " self.__active = False\n", + " Golem.population -= 1\n", + "\n", + " def is_active(self):\n", + " if datetime.date.today().year - self.built_year >= Golem.__life_span:\n", + " self.cease()\n", + " return self.__active\n", + "\n", + " @property\n", + " def population(self):\n", + " return Golem.population\n", + "\n", + "g = Golem('Clay')\n", + "g.population\n", + "# g.population = 100" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2023-06-15T08:29:09.532026600Z", + "start_time": "2023-06-15T08:29:09.478366200Z" + } + } + }, + { + "cell_type": "code", + "execution_count": 14, + "outputs": [ + { + "data": { + "text/plain": "" + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "" + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "" + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Help on class Golem in module __main__:\n", + "\n", + "class Golem(builtins.object)\n", + " | Golem(name=None)\n", + " | \n", + " | Methods defined here:\n", + " | \n", + " | __init__(self, name=None)\n", + " | Initialize self. See help(type(self)) for accurate signature.\n", + " | \n", + " | cease(self)\n", + " | \n", + " | is_active(self)\n", + " | \n", + " | say_hi(self)\n", + " | \n", + " | ----------------------------------------------------------------------\n", + " | Data descriptors defined here:\n", + " | \n", + " | __dict__\n", + " | dictionary for instance variables (if defined)\n", + " | \n", + " | __weakref__\n", + " | list of weak references to the object (if defined)\n", + " | \n", + " | population\n", + "\n" + ] + }, + { + "data": { + "text/plain": "mappingproxy({'__module__': '__main__',\n '_Golem__population': 101,\n '_Golem__life_span': 10,\n '__init__': ,\n 'say_hi': ,\n 'cease': ,\n 'is_active': ,\n 'population': ,\n '__dict__': ,\n '__weakref__': ,\n '__doc__': None})" + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "{'name': 'Clay', 'built_year': 2023, '_Golem__active': True}" + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "True" + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "" + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "text/plain": "10000" + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.core.interactiveshell import InteractiveShell\n", + "InteractiveShell.ast_node_interactivity = \"all\"\n", + "import datetime\n", + "\n", + "class Golem:\n", + " __population = 0\n", + " __life_span = 10\n", + "\n", + " def __init__(self, name=None):\n", + " self.name = name\n", + " self.built_year = datetime.date.today().year\n", + " self.__active = True\n", + " Golem.__population += 1\n", + "\n", + " def say_hi(self):\n", + " print('Hi!')\n", + "\n", + " def cease(self):\n", + " self.__active = False\n", + " Golem.__population -= 1\n", + "\n", + " def is_active(self):\n", + " if datetime.date.today().year - self.built_year >= Golem.__life_span:\n", + " self.cease()\n", + " return self.__active\n", + "\n", + " @property\n", + " def population(self):\n", + " return Golem.population\n", + "\n", + " @population.setter\n", + " def population(self, value):\n", + " Golem.__population = value\n", + "\n", + "g = Golem('Clay')\n", + "g.population\n", + "g.population = 100\n", + "ga = Golem('New')\n", + "g.population\n", + "ga.population\n", + "help(Golem)\n", + "Golem.__dict__\n", + "g.__dict__\n", + "hasattr(Golem, 'population')\n", + "getattr(Golem, 'population')\n", + "setattr(Golem, 'population', 10000)\n", + "g.population" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2023-06-15T08:29:27.143013600Z", + "start_time": "2023-06-15T08:29:27.066281400Z" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false + } + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}