您的位置:首页 > 编程语言 > Python开发

看到别人的解释,之前的疑惑茅塞顿开,Python3 __init__和__str__

2018-02-11 18:00 323 查看
# -*- coding:utf-8 -*-
class TestClass():   #建一个类,试试

     def __init__(me, name, gender):   #定义方法有三个参数,第一个me相当于self,就是根据类创建的实例.

            me.name = name
            me.gender = gender               #这个意思是实例的属性(实例.属性),由参数gender来提供

          print("hello world")  #这个打印hello world,用来证明,创建实例时,__init__自动调用,初始化实例属性,并且打印#hello world

testclass = TestClass('wuq','female')   ----------->创建实例的同时就打印了'hello world',创建实例时的参数和__init__方法初始的参数应一致
print(testclass.name)---------->'wuq'
print(testclass.gender)--------->'female'             

感谢知乎某匿名网友.

另外__str__的进一步理解,和__init__一样,在创建实例时就进行了

# -*- coding:utf-8 -*-
class TestClass():   #建一个类,试试

     def __init__(self, name, gender):   

            self.name = name
            self.gender = gender               

            print("hello world")  #这个打印hello world,用来证明,创建实例时,__init__自动调用,初始化实例属性,并且打印#hello world
        def __str__(self):

            '''

            print('Name:%s, Gender:%s' % (self.name, self.gender))        #这个打印在创建实例时并没有进行,说明__str__和__init__的区别.__init__更多的理解为,创建实例的同时初始化实例的属性,实例的属性有__init__的参数提供

            '''

            return 'Name:%s, Gender:%s' % (self.name, self.gender)   #创建实例时就已经进行了,只是返回给__str__

此时
如果是
testclass = TestClass('xubw','male')------>(创建实例的同时打印hello world)
那么
print(testclass)------>就是Name:xubw, Gender:male          #__str__可以说是对创建的实例变量可以直接调用,此时调用的就是__str__方法,打印出__str__的内容

如果没有 testclass = TestClass('xubw','male')
直接
print(TestClass('xubw','male'))   同样------>Name:xubw, Gender:male     (创建实例的同时打印hello world)

此外
__repr__是直接显示变量调用的,
当在命令行直接输入实例,显示实例时,
比如:
>>>testclass
<__main__.Student object at 0x109afb310>

将输出类似上面的结果...

这样的话,可以再定义一个__repr__和__str__相同的内容
def __repr__(self):
    return 'Name:%s, Gender:%s' % (self.name, self.gender) 

这样在命令行直接输入时就可以返回Name:xubw, Gender:male的结果了.
简单的方法是直接将__repr__ = __str__放在新一行内.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: