类的内置方法(用实际代码来验证)

类的内置方法

类的双下划线方法:

__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)

 

你可能感兴趣的:(类的内置方法(用实际代码来验证))