Skip to content

Commit

Permalink
Merge pull request #454 from realpython/python-double-underscore
Browse files Browse the repository at this point in the history
Sample code for the article on underscores in Python names
  • Loading branch information
KateFinegan authored Nov 20, 2023
2 parents 63235ed + 4fb2c71 commit bd8d069
Show file tree
Hide file tree
Showing 7 changed files with 108 additions and 0 deletions.
3 changes: 3 additions & 0 deletions python-double-underscore/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Single and Double Underscores in Python Names

This folder provides the code examples for the Real Python tutorial [Single and Double Underscores in Python Names](https://realpython.com/python-double-underscore/).
15 changes: 15 additions & 0 deletions python-double-underscore/cart.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
class ShoppingCart:
def __init__(self, customer_id):
self.customer_id = customer_id
self.products = []

def add_product(self, product):
self.products.append(product)

def get_products(self):
return self.products

def __len__(self):
return len(self.products)

# Implementation...
15 changes: 15 additions & 0 deletions python-double-underscore/count.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
_count = 0


def increment():
global _count
_count += 1


def decrement():
global _count
_count -= 1


def get_count():
return _count
19 changes: 19 additions & 0 deletions python-double-underscore/csv_data.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# csv_data.py

import csv


class CSVFileManager:
def __init__(self, file_path):
self.file_path = file_path

def read_csv(self):
return self._read(delimiter=",")

def read_tsv(self):
return self._read(delimiter="\t")

def _read(self, delimiter):
with open(self.file_path, mode="r") as file:
data = [row for row in csv.reader(file, delimiter=delimiter)]
return data
7 changes: 7 additions & 0 deletions python-double-underscore/passenger.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
class Passenger:
def __init__(self, name, class_, seat):
self.name = name
self.class_ = class_
self.seat = seat

# Implementation...
26 changes: 26 additions & 0 deletions python-double-underscore/point.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
class Point:
def __init__(self, x, y):
self._x = x
self._y = y

@property
def x(self):
return self._x

@x.setter
def x(self, value):
self._x = _validate(value)

@property
def y(self):
return self._y

@y.setter
def y(self, value):
self._y = _validate(value)


def _validate(value):
if not isinstance(value, int | float):
raise ValueError("number expected")
return value
23 changes: 23 additions & 0 deletions python-double-underscore/shapes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
_PI = 3.14


class Circle:
def __init__(self, radius):
self.radius = _validate(radius)

def calculate_area(self):
return round(_PI * self.radius**2, 2)


class Square:
def __init__(self, side):
self.side = _validate(side)

def calculate_area(self):
return round(self.side**2, 2)


def _validate(value):
if not isinstance(value, int | float) or value <= 0:
raise ValueError("positive number expected")
return value

0 comments on commit bd8d069

Please sign in to comment.