python基础-面向对象(3)

callable()函数

callable(对象)

判断对象()是否可以运行

class user:
    def __init__(self,name):
        self.user = name
    def login(self):
        pass
a = user('alex')
b = getattr(a,'login')
print(callable(a))         #False
print(callable(b))         #True

__call__方法

使用对象名加()执行的是__call__函数中的内容

class user:
    def __init__(self,name):
        self.user = name
    def login(self):
        pass
    def __call__(self, *args, **kwargs):
        print("调用了call方法")
a = user('alex')
a()                     #调用了call方法

__len__方法

使用len(对象)执行__len__方法中的内容

class Cls:
    def __init__(self,name):
        self.name = name
        self.students = []
    def __len__(self):
        return len(self.students)
py22 = Cls('py22')
py22.students.append('1')
py22.students.append('2')
py22.students.append(3)
print(len(py22))            #3

__new__方法

实例化的时侯先执行__new__方法创建一块空间然后调用__init__函数,创建对象需要的空间

class User:
    def __new__(cls, *args, **kwargs):
        print("执行了new函数")
    def __init__(self):
        print("执行了init函数")
User()   #执行new函数

__str__方法与__repr__方法

在打印一个对象时,调用__str__方法,如果没有该方法,则继续寻找__repr__方法

__repr__还有自己的独立功能

使用%r进行字符串替换时,使用__repr__方法,不使用__str__方法

class Course:
    def __init__(self,name,price,period):
        self.name = name
        self.price = price
        self.period = period
    def get_name(self):
        return self.name
    def __str__(self):
        return ",".join([self.name,str(self.price),self.period])

python = Course('python',21800,'7 month')
linux  = Course('linux',19800,'3 month')
mysql = Course('mysql',12800,'7 month')
go = Course('go',13909,'4 month')

list = [python,linux,mysql,go]

for  i in list:
    print(i)          #mysql,12800,7 month(循环,全部输出)

帮助我们在打印或展示对象时更直观的显示对象的内容

你可能感兴趣的:(python基础,笔记篇,python,开发语言)