Python入门学习笔记10(类的特殊方法)

类的内置特殊方法和属性:

1.__init__(self):构造函数

2.__del__(self):析构函数

3.__new__(cls):

__new__必须有一个cls参数,代表要实例化的类。

必须有返回值,返回的是实例化出来的对象,可以调用父类的__new__,也可以通过object.__new__创建返回的对象

#__new__在init前调用
class Tiger(object):
    def __init__(self,name):
        print("Tiger_init")
        self.name = name

    def __new__(cls, *args, **kwargs):
        print("new_start")
        #实际上可以发现如果不返回object的new,那么并不会调用init
        return object.__new__(cls)

tt = Tiger("Tom")

4.__call__(self)

如果一个类定义了__call__方法,那么该类的实例会变成可调用,既实例可以加上()调用,调用的结果既__call__中的操作

5.__str__(self)

自定义打印实例时的返回值

class A(object):
    def __init__(self):
        pass
    # def __str__(self):
    #     return "我是自定义返回值"

a = A()
print(a)

如果没有定义__str__,打印的值是a的内存地址,如果定义了__str__,打印的便是__str_的返回值

__str_的一个实际运用便是自定义异常,https://www.cnblogs.com/Hexdecimal/p/9364477.html

6.__getitem__(self,key)、__setitem__(key,value)、__delitem__(key)

通过上面三个特殊方法,可以通过字典的形式向实例中添加、删除一系列的变量

通过这种方式添加的变量,实际上是存储在实例的一个数据字典类型的实例变量中,具体地赋值、取值、删除通过三个特殊函数对数据字典进行处理,所以类的构造函数中必须定义一个数据字典类型的实例变量。

class Sample(object):
    def __init__(self):
        self.data = {}

    def __getitem__(self, item):
        return self.data.get(item)

    def __setitem__(self, key, value):
        self.data[key] = value

    def __delitem__(self, key):
        self.data.pop(key)

S = Sample()
S["name"] = "tiger"#set
print(S["name"])#get
del S["name"]#del

7.__doc__,既自定义在类头部的描述信息

8.__module__,当前类属于哪个模块

9.__class__,当前对象属于哪个类

10.__dict__

以字典的形式返回类或者实例的所有方法和属性,

如果是通过实例调用则返回实例属性,

如果是通过类名调用则返回类属性和方法 

 

posted @ 2018-07-25 10:39  wu1  阅读(179)  评论(0编辑  收藏  举报