类和对象

创建

class 类名():
#实例属性
def __init__(self,形参):
self.属性名 = 形参
#实例方法
def 方法名():
方法
#静态方法
@staticmethod
def 方法名():
方法
#类型方法
@classmethod
def 方法名():
方法

对象

对象名=类名()

绑定属性和方法

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

权限控制

单下划线开头

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

双下划线开头

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

首尾双下划线

一般表示特殊的方法

属性设置

将属性转方法使用

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

将这个方法设置为可读

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

继承/重写

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

语法结构:

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 函数,队规拷贝对象中包含的子对象, 源对象和拷贝对象所有的子对象也不同