类的内置方法(用实际代码来验证)
类的内置方法
类的双下划线方法:
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。__len__
#-*- coding:utf-8 -*-
class Length(object):
def __init__(self):
print("xixi")
def __len__(self):
print("length is 180 cm")
return 1
l = Length()
len(l)
必须会的双下线方法:
__Str__ & __repr__
Str函数或者print函数调用是 str
Repr 或者在终端中使用是使用的就是repr
如果没有定义str,那么repr会出来代替输出
这两个方法返回值必须是字符串,否则抛出异常
class School(object):
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
def __repr__(self):
return 'repr'
def __str__(self):
return 'str'
s1 = School('xdd',22,'Man')
print(repr(s1))
print(str(s1))
print(s1)
__del__ 析构方法 和__init__恰恰相反,init为程序启动时,执行,del为程序关闭时,执行.
class School(object):
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
def __del__(self):
print("process dead")
s = School('jack',22,'W')
print('aa')
print('vv')
NEW方法
__new__ 方法在 __init__ 方法之前执行
# -*- coding:utf-8 -*-
class Printer(object):
tasks = [] # 存储打印任务的列表
instance = None
def __init__(self,name):
self.name = name
def add_task(self,job):
self.tasks.append(job)
print("[%s]添加了[%s]到hp打印机,目前任务数量[%s]"%(self.name,job,len(self.tasks)))
def __new__(cls, *args, **kwargs):
#只有第一次实例化的时候进行,后边的实例化不会再次创建一个新实例
if cls.instance is None:# 进行正常的实例化,并把实例化后的对象,存在cls,instance里
obj = object.__new__(cls)#实例化过程
print("obj",obj)
cls.instance = obj #把实例化好的对象存下来
return cls.instance #以后的每次实例化都会返回第一次存在的实例对象
p1 = Printer("word")
p2 = Printer("pdf")
p3 = Printer("execl")
p1.add_task("word data")
p2.add_task("pdf data")
p3.add_task("execl data")
Call方法:__call__ 对象后边加括号触发执行
加上了call方法后
S = School()
S() 这样才会执行
或者使用 School()() 才能执行
例子:
>>> p = Person('Bob', 'male')
>>> p('Tim')
My name is Bob...
My friend is Tim...
单看 p('Tim') 你无法确定 p 是一个函数还是一个类实例,所以,在Python中,函数也是对象,对象和函数的区别并不显著。
Type动态生成一个类
# -*- coding:utf-8 -*-
class Person(object):
def __init__(self, name):
self.name = name
p = Person('Alex')
print(type(p))
print(type(Person))
def __init__(self,name,age):
self.name = name
self.age = age
Class_D = type("Person_Bak",(object,),{'sex':'W',"__init__":__init__}) #通过type动态产生一个类
print(Class_D)
d = Class_D('jack',22)
print(d.sex,d.age,d.name)
print(Class_D)
Isinstance(obj,cls)
检查obj是否是类cls的对象
class Foo(object):
Pass
obj = Foo()
isinstance(obj,Foo)
Issubclass(sub,super)
检查sub类是否是super类的派生类
class Foo(object):
pass
class Bar(object):
pass
issubclass(Bar,Foo)
更多精彩

