Skip to content

Commit d778ea9

Browse files
authored
Merge pull request #370 from realpython/python-del-statement
Sample code for the article on `del`
2 parents 818c59f + 7e24430 commit d778ea9

File tree

7 files changed

+69
-0
lines changed

7 files changed

+69
-0
lines changed

python-del-statement/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Python's del: Remove References From Scopes and Containers
2+
3+
This folder provides the code examples for the Real Python tutorial [Python's del: Remove References From Scopes and Containers](https://realpython.com/python-del-statement/).
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
class Dict(dict):
2+
def __delitem__(self, key) -> None:
3+
print(f"Running .__delitem__() to delete {(key, self[key])}")
4+
super().__delitem__(key)
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
class List(list):
2+
def __delitem__(self, index):
3+
print(f"Running .__delitem__() to delete {self[index]}")
4+
super().__delitem__(index)

python-del-statement/factorial.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
class Factorial:
2+
def __init__(self, number):
3+
self._number = number
4+
self._cache = {0: 1, 1: 1}
5+
self._factorial = self._calculate_factorial(number)
6+
del self._cache
7+
8+
def _calculate_factorial(self, number):
9+
if number in self._cache:
10+
return self._cache[number]
11+
current_factorial = number * self._calculate_factorial(number - 1)
12+
self._cache[number] = current_factorial
13+
return current_factorial
14+
15+
@property
16+
def number(self):
17+
return self._number
18+
19+
@property
20+
def factorial(self):
21+
return self._factorial
22+
23+
def __str__(self) -> str:
24+
return f"{self._number}! = {self._factorial}"
25+
26+
def __repr__(self):
27+
return f"{type(self).__name__}({self._number})"
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
class NonDeleteable:
2+
def __init__(self, value):
3+
self.value = value
4+
5+
def __delattr__(self, name):
6+
raise AttributeError(
7+
f"{type(self).__name__} object doesn't support attribute deletion"
8+
)

python-del-statement/person.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Person:
2+
def __init__(self, name):
3+
self.name = name
4+
5+
@property
6+
def name(self):
7+
return self._name
8+
9+
@name.setter
10+
def name(self, value):
11+
self._name = str(value).upper()
12+
13+
@name.deleter
14+
def name(self):
15+
raise AttributeError("can't delete attribute 'name'")

python-del-statement/sample.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
class SampleClass:
2+
class_attribute = 0
3+
4+
def __init__(self, arg):
5+
self.instance_attribute = arg
6+
7+
def method(self):
8+
print(self.instance_attribute)

0 commit comments

Comments
 (0)