---
title: 类和对象
date: 2024-06-06T23:51:06Z
tags: []
---

## 创建

### 类

```python
class 类名():
        #实例属性
        def __init__(self,形参):
        self.属性名 = 形参

        #实例方法
        def 方法名():
           方法

        #静态方法
        @staticmethod
        def 方法名():
           方法

        #类型方法
        @classmethod
        def 方法名():
           方法
```

### 对象

`对象名=类名()`

## 绑定属性和方法

对象.属性(方法)名=属性(函数名)

## 权限控制

### 单下划线开头

以单下划线开头的属性或方法表示 protected 受保护的成员,这类成员视为仅供内部使用,允许类方法本身或子类进行访问,单实际它可以被外部代码进行访问

### 双下划线开头

表示 private 私有的成员,这类成员只允许定义该属性或方法的类本身进行访问

### 首尾双下划线

一般表示特殊的方法

## 属性设置

### 将属性转方法使用

```python
@property
    def 方法名(self):
        return self.私有属性
```

将这个方法设置为可读

```python
@方法名.setter
    def 方法名(self,形参):
        self.私有属性=形参

```

## 继承/重写

> 一个子类可以继承 N 多个父类
> 一个父类也可以拥有 N 多个子类
> 如果一个类没有继承任何类,那么这个类默认继承的是 object 类

语法结构:

```python
class 类名(父类1,父类2,....,父类N)
    def __init__(self,形参):
                    supper().__init__(self,形参) #调用父类(一个)的初始方法
                    父类名称.__init__(self,形参) #调用父类(多个)的初始方法
        self.属性名 = 形参、
    ##重写方法
    def 方法名称(self):
        super().方法名() #调用父类方法
        方法
```

## 多态

多态允许不同类的对象对同一个消息做出响应，但具体的响应方式取决于对象的类型

## object 类

> 所有类直接或间接的父类
> 所有类都用拥有 object 类的属性和方法

### ibject 类中的特殊的方法

`_new_()`:由系统调用,用于创建对象
`_init_()`:创建对象时手动调用,用于初始化对象属性值
`_str_()`:对象的描述,返回值是 str 类型,默认输出对象的内存地址

## 特殊方法

`+`:**add**()
`-`:**sub**()
`<`:**lt**()
`<=`:**le**()
`==`:**eq**()
`>`:**gt**()
`>=`:**ge**()
`!=`:**ne**()
`*`:**mul**()
`/`:**truediv**()
`%`:**mod**()
`//`:**floordiv**()
`**`:**pow**()

## 特殊属性

`obj.___dict__`:对象的属性字典
`obj.__class__`:对象所属的类
`class.__bases__`:类的父类元组
`class.__base__`:类的父类
`class.___mro__`:类的层次结构
`class.____subclasses__()`:类的子类列表

## 类的深拷贝与浅拷贝

### 变量的赋值

只是形成两个变量,实际上还是指向同一个对象

### 浅拷贝

拷贝是,对象包含的子对象内容不拷贝,因此,源对象与拷贝对象会引用同一个子对象

### 深拷贝

使用 copy 模块的 deepcopy 函数,队规拷贝对象中包含的子对象,
源对象和拷贝对象所有的子对象也不同
