VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 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
= 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")
 
= 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') 你无法确定 是一个函数还是一个类实例,所以,在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
 
 
= 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)
 
= 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

 


相关教程