7. Mô hình đối tượng Python

Mô hình đối tượng Python là nền tảng của CPython. Mọi thứ chạy trong Python cuối cùng đều trở thành một phép toán trên các đối tượng: số nguyên, chuỗi, danh sách, mô-đun, hàm, lớp, ngoại lệ, khung và thậm chí cả mã được biên dịch.

Ở cấp độ ngôn ngữ, Python cho biết mọi đối tượng đều có nhận dạng, loại và giá trị. Nhận dạng đối tượng vẫn cố định sau khi tạo,isso sánh danh tính vàid()trả về một số nguyên đại diện cho danh tính đó. ([Tài liệu Python][1])

CPython triển khai mô hình này với cấu trúc C, tiêu đề đối tượng, số lượng tham chiếu, đối tượng loại và vùng hoạt động.

7.1 Đối tượng, Giá trị và Danh tính

Một đối tượng Python có ba thuộc tính cốt lõi.

Bất động sản Ý nghĩa Ví dụ
Bản sắc Nhận dạng ổn định của đối tượng id(x)
Loại Kiểu thời gian chạy của đối tượng type(x)
Giá trị Dữ liệu được đại diện bởi đối tượng 42, "abc", [1, 2]

Ví dụ:```python x = [1, 2, 3] y = x

print(x is y) # True print(type(x)) # <class 'list'> print(x) # [1, 2, 3]


`x``y` hai tên được liên kết với cùng một đối tượng. Họ  cùng một danh tính.```python
x.append(4)
print(y)             # [1, 2, 3, 4]
```Danh sách đã thay đổi. Sự ràng buộc không tạo ra một bản sao.

Trong CPython, danh tính đối tượng được liên kết chặt chẽ với địa chỉ đối tượng đối với các đối tượng thông thường. Ngôn ngữ chỉ hứa hẹn một danh tính ổn định chứ không phải danh tính đó phải  địa chỉ bộ nhớ.

## 7.2 Tên liên kết với đối tượng

Biến Python  các ràng buộc, không phải hộp lưu trữ.

 này:```python
a = 10
b = a
```không sao chép giá trị số nguyên vào`b`.  ràng buộc`b`đến cùng một đối tượng được tham chiếu bởi`a`.

Đối với các đối tượng bất biến, điều này thường giống như sao chép giá trị:```python
a = 10
b = a
a = 20

print(b)             # 10
```Nhưng đối tượng`10`không thay đổi. Tên`a`đã bật trở lại đối tượng khác.

Đối với các đối tượng  thể thay đổi, sự khác biệt  thể nhìn thấy được:```python
a = []
b = a

a.append("x")

print(b)             # ['x']
```Tên`a` cái tên`b`tham khảo cùng một danh sách. Đột biến thông qua một tham chiếu  thể được nhìn thấy qua tham chiếu kia.

 hình tên-đối tượng này  trung tâm của CPython. Các hướng dẫn  byte chủ yếu tải các tham chiếu đối tượng, lưu trữ các tham chiếu đối tượng, truyền các tham chiếu đối tượng  các thao tác gọi trên các tham chiếu đối tượng.

## 7.3 Mỗi giá trị thời gian chạy là một`PyObject *`Bên trong CPython, các đối tượng thường được xử lý thông qua các con trỏ kiểu`PyObject *`. Tài liệu API C chính thức nêu rõ rằng mọi con trỏ tới đối tượng Python đều có thể được truyền tới`PyObject *`và các bản dựng phát hành thông thường đó lưu trữ số lượng tham chiếu và một con trỏ tới đối tượng loại tương ứng trong cấu trúc đối tượng cơ sở. ([Tài liệu Python][2])

Về mặt khái niệm:```c
typedef struct {
    Py_ssize_t ob_refcnt;
    PyTypeObject *ob_type;
} PyObject;
```Điều này được đơn giản hóa nhưng  nắm bắt được  hình thiết yếu.

Mọi đối tượng đều bắt đầu bằng một tiêu đề được chia sẻ:```text
+--------------------+
| reference count    |
+--------------------+
| type pointer       |
+--------------------+
| object-specific    |
| payload            |
+--------------------+
```Đối với một số nguyên, tải trọng lưu trữ các chữ số nguyên.

Đối với một danh sách, tải trọng lưu trữ thông tin kích thước  một con trỏ tới một mảng tham chiếu phần tử.

Đối với một hàm, tải trọng lưu trữ một đối tượng , toàn cục, mặc định, ô đóng  siêu dữ liệu liên quan.

Tiêu đề chung cho phép trình thông dịch xử  tất cả các đối tượng một cách thống nhất  cấp cao nhất.

## 7.4 Đối tượng có kích thước cố định và kích thước thay đổi

CPython phân biệt các đối tượng  kích thước cố định  các đối tượng  kích thước thay đổi.

Các đối tượng  kích thước cố định sử dụng tiêu đề đối tượng  sở.

Các đối tượng  kích thước thay đổi bao gồm một trường kích thước bổ sung. Tài liệu API C  tả`PyVarObject`như một phần mở rộng của`PyObject`điều đó thêm một`ob_size`trường cho các đối tượng  kích thước thay đổi. ([Tài liệu Python][2])

Về mặt khái niệm:```c
typedef struct {
    PyObject ob_base;
    Py_ssize_t ob_size;
} PyVarObject;
```Một bộ  kích thước thay đổi  một bộ  độ dài 2  một bộ  độ dài 100 cần bộ nhớ khác nhau.

Đối tượng byte  kích thước thay đổi.

Một số nguyên dài cũng  kích thước thay đổi  CPython lưu trữ các số nguyên  độ chính xác tùy ý bằng cách sử dụng một chuỗi các chữ số.

Hình dạng gần đúng:```text
PyObject
    used by many fixed-size objects

PyVarObject
    used by objects whose logical size is known at allocation time
``` dụ:

| Loại đối tượng | Loại tiêu đề |  do |
| ----------- | ----------------------------- | ------------------------------- |
|`float`     | `PyObject`| Tải trọng  kích thước cố định |
|`tuple`     | `PyVarObject`| Số phần tử thay đổi |
|`bytes`     | `PyVarObject`| Số byte khác nhau |
|`int`       | `PyVarObject`| Số chữ số nguyên khác nhau |
|`str`| Bố cục biến chuyên dụng | Độ dài chuỗi thay đổi |

## 7.5 Các kiểu đối tượng Xác định hành vi

Kiểu của một đối tượng xác định những hoạt động   hỗ trợ.  hình dữ liệu của Python xác định điều này  cấp độ ngôn ngữ: các đối tượng  loại  loại xác định các hoạt động được hỗ trợ. ([Tài liệu Python][1])

 cấp độ CPython, con trỏ kiểu trong tiêu đề đối tượng trỏ tới một`PyTypeObject`.

Về mặt khái niệm:```text
object
    ob_refcnt
    ob_type  -------->  type object
                         name
                         size
                         base classes
                         method table
                         number slots
                         sequence slots
                         mapping slots
                         call slot
                         attribute slots
```Khi Python đánh giá:```python
x + y
```CPython không tìm kiếm một vị trí độc lập`add`chức năng.  hỏi loại máy móc  liên quan về cách hoạt động của phép cộng đối với các đối tượng đó.

Đối với số nguyên, phép cộng sử dụng  dành riêng cho số nguyên.

Đối với chuỗi, phép cộng sử dụng nối chuỗi.

Đối với danh sách, phép cộng sẽ tạo ra một danh sách nối.

Đối với các lớp do người dùng định nghĩa, phép cộng  thể gọi`__add__`.

 pháp  thống nhất. Việc thực hiện được định hướng theo kiểu.

## 7.6 Kiểu là đối tượng

Một loại bản thân   một đối tượng.```python
print(type(42))      # <class 'int'>
print(type(int))     # <class 'type'>
print(type(type))    # <class 'type'>
```Cấu trúc đệ quy này   chủ ý.`int` một đối tượng`list` một đối tượng

Các lớp do người dùng định nghĩa  các đối tượng.

Loại đối tượng loại nhất `type`.

```python
class User:
    pass

print(type(User))    # <class 'type'>
print(type(User()))  # <class '__main__.User'>
```Điều này giải thích tại sao các lớp  thể được chỉ định, chuyển, lưu trữ, trang trí  tạo một cách linh hoạt.```python
def make_class():
    class Item:
        pass
    return Item

C = make_class()
obj = C()
```Một câu lệnh lớp tạo ra một đối tượng lớp.  liên kết tên lớp với đối tượng đó.

## 7.7 Bố cục đối tượng và Bố cục kiểu

Bố cục của đối tượng CPython phải phù hợp với những  đối tượng loại của  mong đợi.

Nguồn CPython nhận xét trong`Include/object.h`lưu ý rằng các đối tượng được truy cập thông qua`PyObject *` kích thước đối tượng không thay đổi sau khi phân bổ  việc di chuyển hoặc thay đổi kích thước đối tượng sẽ yêu cầu cập nhật tham chiếu. ([GitHub][3])

Hạn chế đó  quan trọng.

Một danh sách  thể phát triển, nhưng bản thân đối tượng danh sách không mở rộng tại chỗ để chứa tất cả các phần tử một cách trực tiếp. Thay vào đó,  sở hữu một mảng phần tử riêng biệt  thể phân bổ lại.

Một tuple không thể phát triển. Tham chiếu mục của  được lưu trữ như một phần của phân bổ bộ dữ liệu.

Về mặt khái niệm:```text
list object
    header
    current length
    allocated capacity
    pointer to item array  ---> [PyObject*, PyObject*, PyObject*, ...]

tuple object
    header
    length
    inline item references ---> [PyObject*, PyObject*, PyObject*, ...]
```Sự khác biệt này giải thích tại sao việc nối thêm danh sách  thể được khấu hao hiệu quả trong khi kích thước bộ dữ liệu được cố định.

## 7.8 Khả năng thay đổi

Khả năng thay đổi  nghĩa  giá trị của một đối tượng  thể thay đổi trong khi danh tính của  vẫn giữ nguyên.```python
xs = [1, 2]
before = id(xs)

xs.append(3)
after = id(xs)

print(before == after)   # True
```Đối tượng danh sách vẫn giữ nguyên đối tượng. Nội dung của  đã thay đổi.

Các đối tượng bất biến không hiển thị các hoạt động thay đổi giá trị của chúng tại chỗ.```python
s = "abc"
t = s.upper()

print(s)    # abc
print(t)    # ABC
```Thao tác chuỗi trả về một đối tượng khác.

Các đối tượng  thể thay đổi  bất biến phổ biến:

|  thể thay đổi | Bất biến |
| -------------------- | ---------------------------------------------- |
|`list`               | `int`                                          |
| `dict`               | `float`                                        |
| `set`                | `str`                                          |
| `bytearray`          | `bytes`|
| hầu hết các trường hợp lớp |`tuple`, nếu các tham chiếu chứa  được cố định |

Một bộ dữ liệu  bất biến như một vùng chứa, nhưng   thể chứa các đối tượng  thể thay đổi:```python
t = ([],)
t[0].append(1)

print(t)    # ([1],)
```Tuple vẫn trỏ đến cùng một danh sách. Danh sách đã thay đổi.

## 7.9 Ngữ nghĩa tham khảo

Hầu hết các hoạt động thời gian chạy CPython đều di chuyển các tham chiếu đến các đối tượng chứ không phải bản thân các đối tượng.

Các cuộc gọi hàm truyền tham chiếu đối tượng.```python
def add_item(xs):
    xs.append(1)

items = []
add_item(items)

print(items)     # [1]
```Hàm nhận được một tham chiếu đến cùng một đối tượng danh sách.

Việc đặt lại tên địa phương không ảnh hưởng đến người gọi:```python
def replace(xs):
    xs = [1, 2, 3]

items = []
replace(items)

print(items)     # []
```Tên`xs`bên trong chức năng đã được phục hồi. Danh sách ban đầu không bị thay đổi.

Sự khác biệt này quan trọng đối với thiết kế API. Thay đổi một đối tượng  đảo ngược một biến cục bộ  các hoạt động khác nhau.

## 7.10 Thuộc tính

Các đối tượng  thể hiển thị các thuộc tính.```python
class User:
    pass

u = User()
u.name = "Ada"

print(u.name)
```Đối với các đối tượng thông thường do người dùng định nghĩa, các thuộc tính thể hiện thường được lưu trữ trong một từ điển thể hiện.

Về mặt khái niệm:```text
u
    type pointer ---> User
    __dict__ -----> {"name": "Ada"}
```Tra cứu thuộc tính phức tạp hơn tra cứu từ điển trực tiếp. CPython phải tính đến:```text
data descriptors
instance dictionary
non-data descriptors
class attributes
base classes
__getattribute__
__getattr__
method binding
``` dụ:```python
class User:
    species = "human"

u = User()
u.name = "Ada"

print(u.name)       # instance attribute
print(u.species)    # class attribute
```Nếu thuộc tính đó không  trong phiên bản, CPython sẽ tìm kiếm lớp  các  sở của .

## 7.11 Các phương thức là mô tả

Một hàm được lưu trữ trên một lớp hoạt động giống như một phương thức khi được truy cập thông qua một thể hiện.```python
class Counter:
    def inc(self):
        return 1

c = Counter()

print(c.inc)

c.inclà một phương pháp ràng buộc. Nó kết hợp đối tượng hàm với thể hiệnc.

Hành vi này xuất phát từ giao thức mô tả.

Bộ mô tả là một đối tượng xác định một hoặc nhiều:python __get__(self, obj, objtype=None) __set__(self, obj, value) __delete__(self, obj) Chức năng thực hiện__get__, để chúng tự động liên kết khi được truy xuất từ ​​một phiên bản.

Tra cứu khái niệm:```text Counter.inc raw function object

c.inc bound method: function = Counter.inc self = c


## 7.12 Phương pháp đặc biệt và Slots

Cú pháp Python ánh x ti các phương thc đặc bit.

| Cú pháp | Phương pháp đặc bit |
| --------- | -------------- |
|`x + y`   | `__add__`      |
| `x[i]`    | `__getitem__`  |
| `x()`     | `__call__`     |
| `len(x)`  | `__len__`      |
| `iter(x)` | `__iter__`     |
| `next(x)` | `__next__`     |
| `x in y`  | `__contains__` |
| `str(x)`  | `__str__`      |
| `repr(x)` | `__repr__`|

 cp độ CPython, nhiu thao tác trong s này tương ng vi các v trí trong`PyTypeObject`.

Ví d: mt loi có th cung cp các v trí s, v trí trình t, v trí ánh x và v trí cuc gi.

Điu này có nghĩa là mã Python như:```python
len(obj)
```không ch đơn gin là gi`obj.__len__()`thông qua tra cu cá th thông thường. CPython s dng máy móc giao thc cp loi. Điu này làm cho các hot động chung nhanh hơn và nht quán hơn.

## 7.13 Các loại tích hợp là các đối tượng thông thường với các triển khai đặc quyền

Các kiu tích hp tham gia vào cùng mt mô hình đối tượng, nhưng vic trin khai chúng nm trong C.```python
print(type([]))          # <class 'list'>
print(type({}))          # <class 'dict'>
print(type("abc"))       # <class 'str'>
```Tài liu v các loi tích hp chính thc nhóm các loi tích hp chính như s, chui, ánh x, lp, phiên bn và ngoi l. ([Tài liu Python][4])

S khác bit gia`list`và mt lp do người dùng định nghĩa không phi là mt lp là đối tượng còn lp kia thì không. C hai đều là đồ vt. S khác bit là  ch đó`list`có trin khai C vi b cc bên trong c định và các khe cm chuyên dng.

Mt đối tượng danh sách Python cha các chi tiết trin khai như:```text
object header
logical length
allocated capacity
pointer to element storage
```Mt lnh cha vic trin khai bng băm.

Mt chui cha b cc dành riêng cho Unicode và siêu d liu được lưu trong b nh đệm.

Các b cc bên trong này được ti ưu hóa cho hot động thi gian chy ca CPython.

## 7.14 Lớp và phiên bản

Mt lp xác định hành vi được chia s bi các th hin ca nó.```python
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

p = Point(10, 20)
```Khi chy:```text
Point
    class object
    type: type
    attributes:
        __init__
        ...

p
    instance object
    type: Point
    attributes:
        x = 10
        y = 20
```Gi lp gi máy móc xây dng:```text
Point(10, 20)
    call type object
    allocate instance through __new__
    initialize instance through __init__
    return instance
```Đây là lý do ti sao vic xây dng có th được tùy chnh:```python
class OnlyOne:
    def __new__(cls):
        print("allocate")
        return super().__new__(cls)

    def __init__(self):
        print("initialize")

__new__tạo hoặc trả về một đối tượng.__init__khởi tạo nó.

7.15 Kế thừa và giải quyết phương pháp

Python hỗ trợ kế thừa thông qua các lớp.```python class Animal: def speak(self): return "?"

class Dog(Animal): def speak(self): return "woof" Khi phân giải một thuộc tính trên một thể hiện, CPython tìm kiếm theo thứ tự phân giải phương thức lớp, thường được gọi là MRO.python print(Dog.mro) Đối với thừa kế đơn:text Dog Animal object Đối với đa kế thừa, Python sử dụng tuyến tính hóa C3.python class A: pass class B(A): pass class C(A): pass class D(B, C): pass

print(D.mro)


## 7.16 Thứ tự tra cứu thuộc tính

Đối vi mt biu thc bình thường:```python
obj.name
```CPython thc hin tra cu có cu trúc.

Th t đơn gin:```text
1. Look for data descriptors on the type or its bases.
2. Look in the instance dictionary.
3. Look for non-data descriptors or other class attributes.
4. If still missing, call __getattr__ if defined.
5. Otherwise raise AttributeError.
```B mô t d liu xác định`__set__`hoc`__delete__`.

Mt b mô t phi d liu ch xác định`__get__`.

Điu này gii thích ti sao`property`có th ghi đè mt mc t đin mu:```python
class User:
    @property
    def name(self):
        return "computed"

u = User()
print(u.name)
```Thuc tính là mt b mô t d liu. Nó chiến thng vic lưu tr phiên bn thông thường.

## 7.17 Tạo đối tượng

Vic to đối tượng thường có hai giai đon.```text
allocation
    reserve memory for the object

initialization
    set the initial object state
``` cp độ Python:```python
obj = cls.__new__(cls)
cls.__init__(obj)
```Trong mã thông thường, vic gi lp thc hin c hai bước.

 cp độ C, đối tượng loi kim soát vic phân b và khi to thông qua các v trí như:```text
tp_new
tp_init
tp_alloc
tp_dealloc
```S tách bit này quan trng vì các đối tượng bt biến cn giá tr ca chúng trong quá trình to.

Ví d: mt tuple hoc int không th được to trng và sau đó t do biến đổi thành giá tr cui cùng ca nó thông qua các hot động công khai. Giá tr cui cùng ca chúng được thiết lp trong quá trình phân b hoc xây dng.

## 7.18 Phá hủy đối tượng

Vic phá hy đối tượng trong CPython ch yếu da vào s lượng tham chiếu.

Khi s lượng tham chiếu ca mt đối tượng đạt đến 0, CPython s gi hàm phân b ca nó.

V mt khái nim:```text
Py_DECREF(obj)
    decrement reference count
    if reference count == 0:
        call type-specific deallocator
```B cp phát gii phóng các tham chiếu thuc s hu ca đối tượng, gii phóng b nh ph và tr v b nh ca đối tượng cho b cp phát.

Đối vi các container, vic phân b có th xếp tng:```python
xs = [[1], [2], [3]]
del xs
```Xóa danh sách bên ngoài s gim tham chiếu đến danh sách bên trong. Nếu nhng danh sách bên trong đó không có tài liu tham kho nào khác thì chúng cũng b hy.

Các chu k yêu cu thu thp rác theo chu k, vì ch s lượng tham chiếu không th ly li các đối tượng giúp nhau tn ti.

## 7.19 Bình đẳng và bản sắc

Bn sc và s bình đẳng là khác nhau.```python
a = [1, 2]
b = [1, 2]

print(a == b)    # True
print(a is b)    # False

==hỏi xem các đối tượng có so sánh bằng nhau không.ishỏi xem hai tham chiếu có trỏ đến cùng một đối tượng hay không.

Ở cấp độ CPython:```text is compare object pointers

== dispatch rich comparison through type machinery Các lớp tùy chỉnh có thể định nghĩa sự bình đẳng:python class Point: def init(self, x, y): self.x = x self.y = y

def __eq__(self, other):
    return (
        isinstance(other, Point)
        and self.x == other.x
        and self.y == other.y
    )

## 7.20 Băm

Băm h tr các khóa t đin và tp hp các phn t.

Mt đối tượng được s dng làm khóa chính t phi có hàm băm n định khi nó vn còn trong t đin.```python
d = {}
d["name"] = "Ada"
```Các chui có th băm được vì chúng không thay đổi được.

Danh sách không th băm được vì ni dung ca chúng có th thay đổi:```python
hash("abc")      # works
hash((1, 2))     # works
hash([1, 2])     # TypeError
```Mt lp tùy chnh có th định nghĩa:```python
__hash__
__eq__
```Quy tc này rt thc tế: nếu đẳng thc có th thay đổi thì bng băm có th b hng. Các đối tượng có th thay đổi thường nên tránh băm da trên giá tr.

## 7.21 Tài liệu tham khảo về cửa hàng container

Vùng cha Python lưu tr các tham chiếu đến các đối tượng.```python
xs = [object(), object(), object()]
```Danh sách lưu tr các tham chiếu đến ba đối tượng. Nó không ni tuyến d liu đối tượng hoàn chnh ca h.

V mt khái nim:```text
list
    items[0] ---> object A
    items[1] ---> object B
    items[2] ---> object C
```Điu này gii thích hành vi sao chép nông:```python
a = [[1], [2]]
b = a.copy()

b[0].append(99)

print(a)     # [[1, 99], [2]]
```Danh sách bên ngoài đã được sao chép. Các đối tượng danh sách bên trong đã được chia s.

Mt bn sao sâu sao chép đệ quy các đối tượng cha:```python
import copy

a = [[1], [2]]
b = copy.deepcopy(a)
```## 7.22 Giao thức đối tượng

Python da vào các giao thc hơn là các giao din rõ ràng.

Mt đối tượng tham gia vào mt giao thc bng cách thc hin các phương thc phù hp.

Giao thc lp:```python
class Count:
    def __init__(self, stop):
        self.current = 0
        self.stop = stop

    def __iter__(self):
        return self

    def __next__(self):
        if self.current >= self.stop:
            raise StopIteration
        value = self.current
        self.current += 1
        return value
```Giao thc vùng cha:```python
class Bag:
    def __init__(self):
        self.items = []

    def __contains__(self, item):
        return item in self.items
```Giao thc qun lý bi cnh:```python
class Resource:
    def __enter__(self):
        return self

    def __exit__(self, exc_type, exc, tb):
        return False
```Các giao thc này cho phép các đối tượng do người dùng định nghĩa hot động vi cú pháp như:```python
for x in obj:
    ...

with obj:
    ...

if x in obj:
    ...
```Mô hình đối tượng là cu ni gia cú pháp và hành vi.

## 7.23 Một mô hình nội bộ hữu ích

Mt biu thc Python như:```python
result = obj.method(x) + y
```có th được đọc dưới dng các hot động ca mô hình đối tượng:```text
load obj
look up attribute "method"
bind method to obj if descriptor rules apply
load x
call bound method
load y
perform binary addition through type slots
bind result name to returned object
```Mi bước di chuyn hoc to tham chiếu đối tượng.

Mi hot động đều được trung gian bi thông tin loi.

Mi kết qu là mt tham chiếu đối tượng khác.

## 7.24 Phác thảo cấp độ C tối thiểu

Loi tin ích m rng được đơn gin hóa bt đầu bng tiêu đề đối tượng CPython.```c
typedef struct {
    PyObject_HEAD
    long value;
} CounterObject;
```các`PyObject_HEAD`macro cung cp tiêu đề đối tượng tiêu chun cn thiết cho CPython để coi b nh này là đối tượng Python. Đối tượng loi sau đó mô t cách đối tượng này hot động.```c
static PyTypeObject CounterType = {
    PyVarObject_HEAD_INIT(NULL, 0)
    .tp_name = "example.Counter",
    .tp_basicsize = sizeof(CounterObject),
    .tp_flags = Py_TPFLAGS_DEFAULT,
};
```Các loi tin ích m rng thc s cn nhiu trường, khi to, phương thc, x lý li, thiết lp mô-đun và quyn s hu tham chiếu hơn. Nhưng hình dng thì ging nhau:```text
instance memory starts with object header
type object describes behavior
runtime manipulates the object through PyObject *
```##7.25 Tóm tắt

Mô hình đối tượng Python cho biết mi giá tr đều có nhn dng, loi và giá tr. CPython hin thc hóa mô hình này bng`PyObject *`con tr, tiêu đề đối tượng, s lượng tham chiếu, đối tượng loi và v trí hot động.

Mt cái tên gn lin vi mt đối tượng. Mt container lưu tr các tham chiếu đến các đối tượng. Mt loi xác định hành vi. Mt lp là mt đối tượng. Mt instance tr đến lp ca nó. Cú pháp như b sung, gi, lp ch mc, lp và truy cp thuc tính được thc hin thông qua máy móc giao thc hướng kiu.

Mô hình này là cơ s cho phn còn li ca CPython: qun lý b nh, thc thi mã byte, tra cu thuc tính, gi hàm, lp, b mô t, mô-đun m rng và API C.