类和对象

类和对象

创建

TEXT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class 类名():
        #实例属性
        def __init__(self,形参):
        self.属性名 = 形参

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

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

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

对象

对象名=类名()

绑定属性和方法

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

权限控制

单下划线开头

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

双下划线开头

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

首尾双下划线

一般表示特殊的方法

属性设置

将属性转方法使用

TEXT
1
2
3
@property
    def 方法名(self):
        return self.私有属性

将这个方法设置为可读

TEXT
1
2
3
@方法名.setter
    def 方法名(self,形参):
        self.私有属性=形参

继承/重写

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

语法结构:

TEXT
1
2
3
4
5
6
7
8
9
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 函数,队规拷贝对象中包含的子对象, 源对象和拷贝对象所有的子对象也不同