Python学习笔记-Day8
类属性方法
类属性就是类的对象属性,也就是类中的变量
类方法就是类里面的函数,而类里的函数就是方法
类的属性
#定义一个类,然后名字是ANimal,里面的object可写可不写,因为在python3中,class a():和class(object)完全一样,写object是为了python2/3的兼容性
class Animal(object):
owner = 'youzi'
def __init__(self,name):
self.name = name
#没有进行实例化的
print(Animal.owner)
类的方法
#可以让脚本自己在绝对路径下找到python的解释器
#!/usr/bin/env python3
#类的方法
class Animal(object):
#定义一个变量
owner = '游子'
#初始化函数
def __init__(self,name):
#属性name
self.name = name
#可以让我们直接通过类调用,不需要实例,下面会再解释一下的
@classmethod #装饰器
#定义一个函数,也称为方法
#cls 代表类本身(Animal),这个时候我们如果想使用owner,就要cls.owner调用,在类中类变量和属性的调用方法都是一样的
def get_owner(cls):
#这边就返回
return cls.owner
@classmethod
def set_owner(cls,name):
cls.owner = name
#不用实例化,直接调用
print(Animal.owner)
#修改name的值
Animal.set_owner('youzi')
#打印owner的值
print(Animal.owner)
静态方法与魔法方法
@staticmethod 静态方法
@classmethod 类方法
#!/usr/bin/env python3
# 类的方法
class Animal:
owner = '游子'
def __init__(self, name):
self.name = name
# 静态方法:
# 既不需要实例self,也不需要类
@staticmethod
def order_animal_found():
print('<UNK>')
print('<UNK>')
print('<UNK>')
print('<UNK>')
#不用实例化,直接调用
Animal.order_animal_found()
#没有使用@staticmethod
a = Animal('youzi')
a.order_animal_found()
魔术方法
#从time导入sleep函数
from time import sleep
#定义了一个Animal类
class Animal(object):
#创建实例,并添加两个cls和name参数
def __new__(cls,name):
print("__new__")
#对Animal类中的cls进行实例化
return super(Animal,cls).__new__(cls)
#初始化类
def __init__(self,name):
print("__init__")
self.name = name
#定义了一个方法,是删除类的
def __del__(self):
print("__del__")
cat = Animal('tom')
#这个代码的作用是,可以观察到对象从创建到销毁的完整过程
#防止程序结束太快,对象被立即回收看不到__del__
#当我们让程序睡眠5秒时,程序还是在执行的
sleep(10)
类的魔术方法解释
init方法:
- 在创建对象时自己调用
- 用于初始化对象的属性
- 第一个参数必须是self(指向对象本身)
new方法 : 真正创建对象的方法
- 在init之前调用
- 负责分配内存并返回对象
- 可以控制对象的创建过程
更多的魔术方法
| 类别 | 方法 | 描述 | 触发方式 | |
|---|---|---|---|---|
| 构造/析构 | __new__ |
创建对象 | obj = Class() |
|
__init__ |
初始化对象 | obj = Class() |
||
__del__ |
销毁对象 | del obj 或垃圾回收 |
||
| 字符串表示 | __str__ |
用户友好字符串 | str(obj), print(obj) |
|
__repr__ |
官方字符串 | repr(obj), 交互式环境 |
||
__format__ |
格式化输出 | format(obj, spec) |
||
| 属性访问 | __getattr__ |
访问不存在属性 | obj.undefined |
|
__getattribute__ |
访问任何属性 | obj.any_attribute |
||
__setattr__ |
设置属性 | obj.attr = value |
||
__delattr__ |
删除属性 | del obj.attr |
||
__dir__ |
列出属性 | dir(obj) |
||
| 容器操作 | __len__ |
获取长度 | len(obj) |
|
__getitem__ |
索引访问 | obj[key] |
||
__setitem__ |
设置值 | obj[key] = value |
||
__delitem__ |
删除项 | del obj[key] |
||
__contains__ |
成员测试 | item in obj |
||
__iter__ |
迭代 | for x in obj |
||
__reversed__ |
反向迭代 | reversed(obj) |
||
| 数值运算 | __add__ |
加法 | obj + other |
|
__sub__ |
减法 | obj - other |
||
__mul__ |
乘法 | obj * other |
||
__truediv__ |
除法 | obj / other |
||
__eq__ |
等于 | obj == other |
||
__lt__ |
小于 | obj < other |
||
__gt__ |
大于 | obj > other |
||
| 上下文管理 | __enter__ |
进入上下文 | with obj: |
|
__exit__ |
退出上下文 | with obj: 结束 |
||
| 调用操作 | __call__ |
使对象可调用 | obj() |
|
| 描述符 | __get__ |
描述符获取 | 作为属性访问时 | |
__set__ |
描述符设置 | 属性赋值时 | ||
__delete__ |
描述符删除 | del obj.attr |