---
# System prepended metadata

title: 4/09 Python與資料分析#5 - 物件
tags: [python, 資料分析]

---

# 4/09 Python與資料分析#5 - 物件

Procedural Programming
線性、單方向走向的程式設計

Object-oriented Programming
比較沒有順序性、同心圓向外擴展

## 物件Object與類別Class

### 物件

由某個類別宣告出來的變數名稱，具備該類別某種行為特徵
They hold both data, and ways to manipulate the data. 

### 類別

提供這個物件需要的行為，而宣告出來的東西
A class provides a set of behaviors in the form of member functions (also known as methods)
可以視為"物件"的"藍圖"，使用上可以稍做修改
A class also serves as a blueprint for its instances
物件就是實踐類別這個藍圖的產品

例如類別list有pop的行為
字串str有迭代的行為

### 一些內建的類別

* Scalars
int
float
str
bool
NoneType
* Data Structures
list
tuple
dict
set
* 第三方開發
ndarray
Index
Series
DataFrame

## 建構Class

將特定函數或資料綁在某個物件上

### 綁定特定函數(方法)

* class defines the name diplayed when calling type() after object is created
* __init__ initiates the object itself
* self proxies the object itself after object is created

```
class ClassName:  #Class 類別名稱
    """
    docstring: print documentation when __doc__ attribute is accessed
    """
    def __init__(self, ATTRIBUTES, ...):
        # sequence of statements 綁定資料
        # 可以看做起始呼叫的某個叫__init__的函數
    def method(self, ATTRIBUTES, ...):
        # sequence of statements 綁定函數
```

舉例 
定義甚麼都沒做的類別
```
class SimpleCalculator:
    """
    This class creates a simple calculator that is unable to do anything.
    """
    pass
```

物件化

```
sc = SimpleCalculator()
print(type(sc))
print(sc.__doc__)
```

得到：
<class '__main__.SimpleCalculator'>
This class creates a simple calculator that is unable to do anything.


另一個例子：

```
class SimpleCalculator:
    """
    This class creates a simple calculator that is able to add and subtract 2 numbers.
    """
    def add(self, x, y):
        return x + y
    def subtract(self, x, y):
        return x - y
```

呼叫使用的時候

```
sc = SimpleCalculator()
sc.add('55', '66')
sc.subtract(55, 66)
```

後來將此類別命名成sc
呼叫的時候要sc.add
self可以想成代名後來命名的sc

class SimpleCalculator 類似generator
sc實體化

有些操作不是函數名稱()
而是 資料名稱.操作方式
例如x.append而非append(x)
就是因為把append視為class下的一個方法

### 綁定特定資料(屬性attributes)

使用__init()__


舉例

```
class SimpleCalculator:
    """
    This class creates a simple calculator that is able to add, subtract, multiply, and divide 2 numbers.
    This class has an attribute of Euler's number: e.
    """
    def __init__(self):
        self.e = 2.71828182846
```

把e=2.718...用在此物件下，用self代替這個類別的名稱
使用的話就用self.e代替這個資料

## 繼承 Inheritance

class 新的類別名稱(想要拿來用的已經定義的類別名稱):
    pass
    
就可以繼承之前的類別了
使用的時候會用新的類別名稱
例如sc=新的名稱()
sc.函數名稱
連同之前的屬性也可以用

也可以在後面def新的方法

許多東西可以延用之前的東西，不需要自己重新做

###### tags: `python` `資料分析`