Skip to content

Commit f61f95c

Browse files
committed
Metaclass
1 parent b1d4e05 commit f61f95c

File tree

1 file changed

+13
-10
lines changed

1 file changed

+13
-10
lines changed

README.md

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1071,23 +1071,24 @@ type(<class_name>, <parents_tuple>, <attributes_dict>)
10711071
#### Class that creates class.
10721072
```python
10731073
def my_meta_class(name, parents, attrs):
1074-
...
1074+
attrs['a'] = 1
10751075
return type(name, parents, attrs)
10761076
```
10771077

10781078
#### Or:
10791079
```python
10801080
class MyMetaClass(type):
10811081
def __new__(klass, name, parents, attrs):
1082-
...
1082+
attrs['a'] = 1
10831083
return type.__new__(klass, name, parents, attrs)
10841084
```
10851085

10861086
### Metaclass Attribute
1087-
**When class is created it checks if it has metaclass defined. If not, it recursively checks if any of his parents has it defined, and eventually comes to type:**
1087+
**When class is created it checks if it has metaclass defined. If not, it recursively checks if any of his parents has it defined and eventually comes to type.**
10881088
```python
1089-
class BlaBla:
1090-
__metaclass__ = Bla
1089+
class MyClass(metaclass=MyMetaClass):
1090+
def __init__(self):
1091+
self.b = 2
10911092
```
10921093

10931094

@@ -1105,8 +1106,8 @@ import operator as op
11051106
product_of_elems = functools.reduce(op.mul, <list>)
11061107
sorted_by_second = sorted(<list>, key=op.itemgetter(1))
11071108
sorted_by_both = sorted(<list>, key=op.itemgetter(1, 0))
1108-
LogicOp = Enum('LogicOp', {'AND': (op.and_, ),
1109-
'OR' : (op.or_, )})
1109+
LogicOp = enum.Enum('LogicOp', {'AND': op.and_,
1110+
'OR' : op.or_})
11101111
```
11111112

11121113

@@ -1119,6 +1120,8 @@ Eval
11191120
3
11201121
>>> literal_eval('[1, 2, 3]')
11211122
[1, 2, 3]
1123+
>>> ast.literal_eval('abs(-1)')
1124+
ValueError: malformed node or string
11221125
```
11231126

11241127
### Using Abstract Syntax Trees
@@ -1158,11 +1161,11 @@ def eval_node(node):
11581161
```
11591162

11601163
```python
1161-
>>> evaluate('2^6')
1164+
>>> evaluate('2 ^ 6')
11621165
4
1163-
>>> evaluate('2**6')
1166+
>>> evaluate('2 ** 6')
11641167
64
1165-
>>> evaluate('1 + 2*3**(4^5) / (6 + -7)')
1168+
>>> evaluate('1 + 2 * 3 ** (4 ^ 5) / (6 + -7)')
11661169
-5.0
11671170
```
11681171

0 commit comments

Comments
 (0)