美文网首页数析
python 定制类

python 定制类

作者: 我爱学python | 来源:发表于2020-01-16 14:58 被阅读0次

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

    比如slots函数、str函数、repr函数。。。

    __ slots__

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

    '''
    遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
    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一样,所以可以采用如下写法:

    '''
    遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
        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是改变直接显示对象内容的。

    相关文章

      网友评论

        本文标题:python 定制类

        本文链接:https://www.haomeiwen.com/subject/xpvfzctx.html