成员方法的self参数

成员方法中self表示调用该方法的对象。
对象调用⽅法时,python解释器会把这个对象作为第⼀个参数传递给⽅法
通过self也可以获取对象的属性,调用对象的其它成员方法

  1. class Person:
  2. def __init__(self, name, age):
  3. # 定义成员属性
  4. self.name = name
  5. self.age = age
  6. def say_hello(self):
  7. # 通过self访问成员属性
  8. print(self.name)
  9. # 对象
  10. p = Person('张三', 30)
  11. p.say_hello()

__init__方法

__init__是一个内置的方法
对象创建的时候就会自动执行__init__方法

  1. # 定义类
  2. class Person:
  3. def __init__(self):
  4. print('执行了init方法')
  5. # 创建对象
  6. p1 = Person()
  7. p2 = Person()

运行程序,输出:

  1. 执行了init方法
  2. 执行了init方法

一旦创建了该类的对象就会执行__init__方法

__str__方法

__str__也是类的内置方法
用于将对象转化为适于人阅读的形式
先看一段代码:

  1. class Person:
  2. def __init__(self,name,age):
  3. # 成员属性
  4. self.name = name
  5. self.age = age
  6. # 创建对象
  7. p1 = Person('张三',30)
  8. p2 = Person('李四',40)
  9. print(p1)
  10. print(p2)

创建了两个对象,输出两个对象
结果:

  1. <__main__.Person object at 0x03769D10>
  2. <__main__.Person object at 0x03769FD0>

从结果中我们并不能区分出到底哪个是属于p1,哪个是属于p2
可以通过__str__提取对象的主要特征用于区分不同的对象

  1. class Person:
  2. def __init__(self,name,age):
  3. # 成员属性
  4. self.name = name
  5. self.age = age
  6. def __str__(self):
  7. '''
  8. 以字符串输出对象,把对象变成我们能够读懂的形式输出出来
  9. :return:
  10. '''
  11. return 'name:{}, age:{}'.format(self.name,self.age)
  12. # 创建对象
  13. p1 = Person('张三',30)
  14. p2 = Person('李四',40)
  15. print(p1)
  16. print(p2)

输出结果:

  1. name:张三, age:30
  2. name:李四, age:40

我们从结果中很容易就区分出两个对象的不同