首页 > temp > python入门教程 >
-
Python类的内置方法(用实际代码来验证)
类的双下划线方法:
__len__
1
2
3
4
5
6
7
8
9
10
|
#-*- 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会出来代替输出
这两个方法返回值必须是字符串,否则抛出异常
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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为程序关闭时,执行.
1
2
3
4
5
6
7
8
9
10
11
12
|
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__ 方法之前执行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
# -*- 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动态生成一个类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# -*- 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)
出处:https://www.cnblogs.com/zjaiccn/p/13220366.html