大家好我是程序员_蓝天, 本文是为了方便初学者能够快速学习python,写的可能不是很好,希望大家多多包涵。 每个赞都是我前进的动力
二,绑定与非绑定
类方法 classmethod
类方法,通过装饰器@classmethod 进行修饰,类方法可以类在多次实例化后有个记忆的功能
类方法操作的一定是类属性,因为类方法无法通过self去查找对象的实例属性
class Bar:
# 类属性
id = 0
def __init__(self, name):
self.name = name
self.count()
@classmethod
def count(cls):
cls.id +=1
return cls.id
af = Bar('python')
print(af.id)
# 类方法可以类调用,也可以对象调用
Bar.count()
af.count()
java = Bar('java')
print(java.id)
go = Bar('go')
print(go.id)
静态方法 staticmethod
- 静态方法, 通过装饰器进行修饰,没有cls,self参数限制的方法也就是没有绑定的方法
- 静态方法就是相当于定义在类外面的函数,只是为了方便管理常用的方法(函数)放在类中统一管理
- 使用@staticmethod修饰的方法 不需要传参
- 静态方法 不访问类成员和实例成员
- 用于:定义常用的工具函数
# 静态方法
import time
class A:
@staticmethod
def fun1():
print(f'{time.strftime("%Y/%m/%d")}')
class B(A):
pass
b = B()
b.fun1()
A.fun1()
三,类型检查
type() # 检查变量的数据类型
issubclass(cls, class_tuple) # 检查是否被继承 返回bool值,判断是否继承
# cls 类名, class_tuple 继承的类名
isinstance(obj, cls) # 对象是否有类实例化而来
# obj 对象 cls 类名
四,内置方法(了解)
1. 信息格式化方法
__str__ 该方法用户可以直接通过打印对象名字来获取对象的自定义描述,而不是对应的内存地址
__repr__该方法是返回对象的自定义描述,是在交互模式下进行使用
## repr
>>> class A:
... def __repr__(self):
... return '你们是python最亮的仔'
...
>>>
>>> a = A()
>>> a
你们是python最亮的仔
>>> class B:
... pass
...
>>>
>>> b = B()
>>> b
<__main__.B object at 0x000001EEB3B61988>
class People:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return f'---repr---'
def __str__(self):
return f'我叫{self.name} 今年{self.age}岁'
wx = People('wx', 18)
print(wx)
2. 析构方法
__del__ 当检测到对象要被干掉的时候,就会自动的触发这个方法
#### 析构方法
class A:
def __init__(self, name, age):
self.name = name
self.age = age
def __del__(self):
print(f"{self.name}被干掉")
a = A('jk', 12)
del a # del 把a 干掉
print(A)
print(a)
3. new 方法
__new__ 内置的静态类方法,主要是给实例对象分配内存空间的
python解释器在得到这个方法返回的实例对象引用之后,将这个引用作为第一个参数传递给init方法中使用
如果没有返回这个对象的引用,python解释器就获取不到这个对象,new必须要有返回值
#### new方法
class A:
def __new__(cls, *args, **kwargs):
print('给对象分配内存空间')
instace = super().__new__(cls)
# 返回这个实例对象
return instace
def __init__(self, name, age):
print('进行初始化方法')
self.name = name
self.age = age
a = A('jk', 12)
print(A)
print(a)
单例
好处:省内存,
#### new方法
class A:
_instance = None
def __new__(cls, *args, **kwargs):
print('给对象分配内存空间')
if cls._instance is None:
cls._instance = super().__new__(cls, *args, **kwargs)
# 返回这个实例对象
return cls._instance
def __init__(self, name, age):
print('进行初始化方法')
self.name = name
self.age = age
a = A('jk', 12)
b = A('jk', 12)
c = A('jk', 12)
d = A('jk', 12)
e = A('jk', 12)
print(c == b) # True 是单例
print(id(c))
print(id(b))
print(id(d))
print(id(e))