<commit_before>---
layout: post
title:  Python Data Classes
description: Python 3’ün yeni tür etiketlerini kullanmanın avantajını da taşıyorlar.
keywords: linux, python
summary: "Python Data Classes"
excerpt: Python 3’ün yeni tür etiketlerini kullanmanın avantajını da taşıyorlar.
categorie: Programlama
tags:   Python Linux Programlama
categories: Programming
permalink: /:categories/:title/
date:   2019-02-18 12:00:00
last_updated: 2019-02-18 12:00:00
comments: false
published: true
lang: tr
redirect_from:
  - /DataClasses/
---
 
  
## Python 3.7 “Data Classes”

![Data Classes](/images/data-class/data-class.jpg "Data Classes"){:height="100%" width="100%"}

Python 3.7'deki yepyeni bir özellik __“Data Classes”__ dır. __“Data Classes”__ , birden fazla özellik barındıran sınıflar için klişe kod üretimini otomatikleştirmenin bir yoludur.

Ayrıca Python 3’ün yeni tür etiketlerini kullanmanın avantajını da taşıyorlar.

__“Data Classes”__  Python 3.7'deki standart kitaplık içindeki  __“dataclasses”__ yeni veri sınıfları modülü ile sağlanır ve ihtiyacınız olacak 2 önemli şey içerir.
 
1. Bir veri sınıfını dekore etmek için __“dataclass decorator”__ süslü fonksiyonları
2. Alanları yapılandırmak için __“field”__ komut yordamı

## Öntanımlı sihirli yordamlar
Varsayılan ayarla,  herhangi bir dataclass  __init__, __repr__, __str__ ve __eq__ komut yordamlarını sizin için uygulayacak.

__init__ yordamı, sınıfta belirtilen aynı tip açıklamalarla anahtar sözcük ifadelerine sahip olacak.

The __eq__ yordamı, tüm dataclass özniteliklerini sırayla karşılaştıracaktır.

Sınıfın üst kısmında gösterilen tüm alanlar ve tip gösterimi gereklidir. 

{% highlight python %}
from dataclasses import dataclass

@dataclass
class SimpleDataObject(object):
  '''
  In this case,
  __init__, __repr__, __eq__,  will all be generated automatically.
  '''
  
  field_a: int
  field_b: str

example = SimpleDataObject(1, 'b')
print(example)  # SimpleDataObject(field_a=1, field_b='b')

example2 = SimpleDataObject(1, 'b')
print(example == example2)  # True
{% endhighlight %}

|SimpleDataObject(field_a=1, field_b='b')
|True

[Try it online!](https://tio.run/##jU7BTsMwDL3nK57EIatUIQG3SpE4cNmJA9wrt/VYUJqUxBPs64tXuu2wC1JiP9vvPXs6yj7Fp3ne5TRiIKE@UClc4McpZbm2jHm@4iXiTTmBX7T72n1yL5u0pKoxgLVW4zZC9r6gp8K11m3ro5e2rRVlnvIf4q9TxrcPAaS/Y3xw5EzCA@ggaSTxvU6O9xdnfTvPYWipgY9yKbsGRbIx/EOn4@Bur3yoYTtbmSmrcLMSK@DulrqucCpZ7d0iPds//tsfzuEsWna95wPP8y8 "Python 3 – Try It Online")


Bu __init__  yordamı (field_a: int, field_b: str) -> None 
şeklinde bir tanımlayıcıya sahip olabilir. Bunu sadece % highlight python %}print(inspect.signature(example.__init__)){% endhighlight %} yazarak görebilirsiniz.

## Tip Gösterimi
Quite importantly, the type hints are merely hints. So giving the wrong types doesn’t issue a warning or attempt a conversion.

Because type hinting is required (otherwise the field is ignored), if you don’t have a specific type, use the Any type from the typing module.


{% highlight python %}
from dataclasses import dataclass


@dataclass
class SimpleDataObject(object):
  '''
  In this case,
  __init__, __repr__, __eq__,  will all be generated automatically.
  '''
  
  field_a: int
  field_b: str

example = SimpleDataObject('a', 'b')
print(example)  # Gives SimpleDataObject(field_a='a', field_b='b')
{% endhighlight %}<commit_msg>commit<commit_after>---
layout: post
title:  Python Data Classes
description: Python 3’ün yeni tür etiketlerini kullanmanın avantajını da taşıyorlar.
keywords: linux, python
summary: "Python Data Classes"
excerpt: Python 3’ün yeni tür etiketlerini kullanmanın avantajını da taşıyorlar.
categorie: Programlama
tags:   Python Linux Programlama
categories: Programming
permalink: /:categories/:title/
date:   2019-02-18 12:00:00
last_updated: 2019-02-18 12:00:00
comments: false
published: true
lang: tr
redirect_from:
  - /DataClasses/
---
 
  
## Python 3.7 “Data Classes”

![Data Classes](/images/data-class/data-class.jpg "Data Classes"){:height="100%" width="100%"}

Python 3.7'deki yepyeni bir özellik __“Data Classes”__ dır. __“Data Classes”__ , birden fazla özellik barındıran sınıflar için klişe kod üretimini otomatikleştirmenin bir yoludur.

Ayrıca Python 3’ün yeni tür etiketlerini kullanmanın avantajını da taşıyorlar.

__“Data Classes”__  Python 3.7'deki standart kitaplık içindeki  __“dataclasses”__ yeni veri sınıfları modülü ile sağlanır ve ihtiyacınız olacak 2 önemli şey içerir.
 
1. Bir veri sınıfını dekore etmek için __“dataclass decorator”__ süslü fonksiyonları
2. Alanları yapılandırmak için __“field”__ komut yordamı

## Öntanımlı sihirli yordamlar
Varsayılan ayarla,  herhangi bir dataclass  __init__, __repr__, __str__ ve __eq__ komut yordamlarını sizin için uygulayacak.

__init__ yordamı, sınıfta belirtilen aynı tip açıklamalarla anahtar sözcük ifadelerine sahip olacak.

The __eq__ yordamı, tüm dataclass özniteliklerini sırayla karşılaştıracaktır.

Sınıfın üst kısmında gösterilen tüm alanlar ve tip gösterimi gereklidir. 

{% highlight python %}
from dataclasses import dataclass

@dataclass
class SimpleDataObject(object):
  '''
  In this case,
  __init__, __repr__, __eq__,  will all be generated automatically.
  '''
  
  field_a: int
  field_b: str

example = SimpleDataObject(1, 'b')
print(example)  # SimpleDataObject(field_a=1, field_b='b')

example2 = SimpleDataObject(1, 'b')
print(example == example2)  # True
{% endhighlight %}

|SimpleDataObject(field_a=1, field_b='b')
|True

[Try it online!](https://tio.run/##jU7BTsMwDL3nK57EIatUIQG3SpE4cNmJA9wrt/VYUJqUxBPs64tXuu2wC1JiP9vvPXs6yj7Fp3ne5TRiIKE@UClc4McpZbm2jHm@4iXiTTmBX7T72n1yL5u0pKoxgLVW4zZC9r6gp8K11m3ro5e2rRVlnvIf4q9TxrcPAaS/Y3xw5EzCA@ggaSTxvU6O9xdnfTvPYWipgY9yKbsGRbIx/EOn4@Bur3yoYTtbmSmrcLMSK@DulrqucCpZ7d0iPds//tsfzuEsWna95wPP8y8 "Python 3 – Try It Online")


Bu __init__  yordamı (field_a: int, field_b: str) -> None 
şeklinde bir tanımlayıcıya sahip olabilir. Bunu sadece {% highlight python %}print(inspect.signature(example.__init__)){% endhighlight %} yazarak görebilirsiniz.

## Tip Gösterimi
Quite importantly, the type hints are merely hints. So giving the wrong types doesn’t issue a warning or attempt a conversion.

Because type hinting is required (otherwise the field is ignored), if you don’t have a specific type, use the Any type from the typing module.


{% highlight python %}
from dataclasses import dataclass


@dataclass
class SimpleDataObject(object):
  '''
  In this case,
  __init__, __repr__, __eq__,  will all be generated automatically.
  '''
  
  field_a: int
  field_b: str

example = SimpleDataObject('a', 'b')
print(example)  # Gives SimpleDataObject(field_a='a', field_b='b')
{% endhighlight %}
{'fraction_non_alphanumeric': 0.08335836587563833, 'fraction_numerical': 0.03063983178131571, 'mean_word_length': 5.679037111334002, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 5, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5086217', 'n_tokens_mistral': 2946, 'n_tokens_neox': 2682, 'n_words': 672}