Python学习基础笔记六十三——几个内置方法

内置的类方法和内置的函数之间有着千丝万缕的联系。

1、双下方法:

__str__

__repr__

#str()

#repr()

print(repr(1))
print(repr(1))
print(1, 1)

2、 __len__

len()

3、

class A:
    pass


a = A()

print(str(a))

object 里有一个__str__,一旦被调用,就返回调用这个方法的对象的内存地址。

class A:
    def __str__(self):
        return "As object!"


a = A()

print(a)

打印一个对象的时候,就是调用a.__str__。

4、

class A:
    def __str__(self):
        return "As object!"

    def func(self):
        return wahaha


a = A()

print(a)

print(%s:%s%(A, a))

5、

class Teacher:
    def __init__(self, name, salary):
        self.name = name
        self.salary = salary

    def __str__(self):
        return "Teachers object: %s" % self.name

    def __repr__(self):
        return str(self.__dict__)

    def func(self):
        return wahaha


nezha = Teacher(nezha, 250)
print(nezha)

print(repr(nezha))
print(>>> %r % nezha)

str(), 实际上是走的__str__

repr() 实际上是走的__repr__

repr是str的备胎,str不能做repr的备胎。

print(obj)/%s/str(obj)的时候,实际上是内部调用了obj.__str__方法,如果str方法有,返回的是必定是一个字符串。

如果没有__str__方法,会先找到本类中的__repr__方法,再没有再找父类中的__str__方法。

repr(),只会找__repr__, 如果没有就找父类的。

内置方法有很多。

不一定全都在object中。

class A:
    def __len__(self):
        return 10


a = A()

print(a.__len__())
print(len(a))
class Classes:
    def __init__(self, name):
        self.name = name
        self.student = []

    def __len__(self):
        return len(self.student)


py_s9 = Classes(Python全栈9)

py_s9.student.append(chang)
py_s9.student.append(jiang)

print(len(py_s9))

__del__析构函数:

析构方法,当对象在内存中被释放时,自动触发执行。

注:此方法无需定义,析构函数的调用都是由解释器在进行垃圾回收时自动触发执行的。

class A:
    def __del__(self):
        print("执行我啦!")


a = A()

del a  # 即执行了这个方法,又删除了变量

print(a)
class A:
    def __del__(self):
        print("执行我啦!")


a = A()

import time
time.sleep(3)

内部有一个引用计数的机制,

class A:
    def __del__(self):    # 析构函数
        self.f.close()    # 收尾工作


a = A()

a.f = open()   # 打开文件 第一,在操作系统中打开一个文件 拿到了文件操作符存在内存中
del a          # a.f 拿到了文件操作符消失在内存中

__call__方法:

class A:
    def __init__(self, name):
        pass

    def __call__(self):
        print("执行我啦!")


a = A(Alex)()

一个对象加上括号,就是调用call方法。

class A:
    def __init__(self, name):
        self.name = name

    def __call__(self):
        for k in self.__dict__:
            print(k, self.__dict__[k])


a = A(Alex)()
经验分享 程序员 微信小程序 职场和发展