python 中可以使用一些函数,对类进行定制,方便我们的使用。

比如__slots__函数、__str__函数、__repr__函数。。。

__slots__

    __slots__函数用于定制可以动态添加的类的属性,比如:

class Student(object):
    __slots__ = ('name', 'age')
    def __init__(self, name):
        self.name = name

a = Student('Bob')
a.name = 'hehe'
a.age = 17

print a.name  #hehe
print a.age    #17

 __slots__函数后面的('name', 'age')限定了,Student类的对象只能动态添加‘name’和'age'两种属性,添加其他的会报错。

此处要注意,如果Student是继承字object的新式类时,__slots__函数才起作用。

__str__

    已经定义好的类的对象,直接打印时(print a)会调用__str__()函数,可以通过在类中定义__str__函数,可以改变对象打印print a的结果。

class Student():
    __slots__ = ('name', 'age')
    def __init__(self):
        self.name = 10
        
    def __str__(self):
        return 'Student object (name: %s)' % self.name
a = Student()
print a #Student object (name: 10)

 但是,如果不用print, 而是直接写变量名,则打印结果还是看不懂:<__main__.Student instance at 0x0276D710>。此时就需要__repr__函数。

__repr__

    一般的,__repr__函数内容跟__str__一样,所以可以采用如下写法:

class Student():
    __slots__ = ('name', 'age')
    def __init__(self):
        self.name = 10
        
    def __str__(self):
        return 'Student object (name: %s)' % self.name

    __repr__ = __str__

a = Student()
a #Student object (name: 10)

 所以,类中重新定义__str__是改变print的显示内容的,重新定义__repr__是改变直接显示对象内容的。

posted on 2018-03-08 16:44  望月又一  阅读(151)  评论(0编辑  收藏  举报