يتم إعطاؤك مقتطف الكود التالي:

```
من zipkin.models قم باستيراد نقطة النهاية
```

مهمتك هي تنفيذ الكود المفقود لفئة "نقطة النهاية". تمثل فئة `نقطة النهاية' نقطة نهاية الشبكة، مثل الخدمة أو المضيف، في نظام موزع.

تحتوي فئة "نقطة النهاية" على السمات التالية:

- `service_name`: سلسلة تمثل اسم الخدمة.
- `ipv4`: سلسلة تمثل عنوان IPv4 لنقطة النهاية.
- `ipv6`: سلسلة تمثل عنوان IPv6 لنقطة النهاية.
- `المنفذ`: عدد صحيح يمثل رقم منفذ نقطة النهاية.

مهمتك هي تنفيذ الكود المفقود للفئة `Endpoint`، بحيث تحتوي على مُنشئ يقوم بتهيئة سمات `service_name` و`ipv4` و`ipv6` و`port`.

تنفيذ فئة `Endpoint` حسب المواصفات التالية:

- يجب أن تحتوي فئة `Endpoint` على مُنشئ يأخذ أربع وسيطات: `service_name`، و`ipv4`، و`ipv6`، و`port`. يجب على المُنشئ تهيئة السمات المقابلة لكائن "نقطة النهاية".
- إذا لم يتم توفير وسيطات `ipv4` أو `ipv6`، فيجب تعيينها على `None`.
- إذا لم يتم توفير وسيطة "المنفذ"، فيجب ضبطها على "0".

أكمل الكود الخاص بفئة "نقطة النهاية".
{"source": "argilla/DistiCoder-dpo-binarized", "kind": "synthetic", "evolved_from": null}