目录
1.__init__(类的初始化)
在Python的类中,初始化的格式是__init__(self):,方法名由init(initialize的缩写,意思是初始化),左右都是双下划线。
初始化的特殊之处是:每当进行类的实例化时,初始化方法都会被自动执行。
class Human():
def __init__(self):
print('我是小浪宝宝,请多指教。')
human = Human()
输出:
我是小浪宝宝,请多指教。
初始化方法里可以完成类属性初始化得设置。比如:
class Human():
def __init__(self):
self.arms = 2
self.legs = 2
self.name = '小浪宝宝'
def intro(self):
print('我是小浪宝宝,请多指教。')
human = Human()
print(human.name)
输出:
小浪宝宝
除了进行固定的初始化设置,初始化方法可以接收其他参数,进行自定义的属性初始化设置。例如下面的程序,给初始化方法添加了四个参数,在实例化时自动传入对应的变量,'小浪宝宝'赋值给self.name,两个2分别赋值给self.arms和self.legs,'黑色的头发'赋值给self.hair。
class Human():
def __init__(self,name,arm,leg,hair):
self.arms = 2
self.legs = 2
self.hair = hair
self.name = name
def intro(self):
print('我是{},我有{}'.format(self.name,self.hair))
Xiaolang = Human('小浪宝宝',2,2,'黑色的头发')
print(Xiaolang.name)
Xiaolang.intro()
输出:
小浪宝宝
我是小浪宝宝,我有黑色的头发
2.__str__方法
像 __init__ 、__str__ 这样的方法在Python中被成为神奇方法(或魔术方法),他们的的特征是被双下划线所包裹。
有了 __str__() 方法,直接打印实例的结果为 __str__() 方法的返回值,因此,可以用 __str__() 方法来描述一个类。
class Human():
def __init__(self,name,arm,leg,hair):
self.arms = 2
self.legs = 2
self.hair = hair
self.name = name
def __str__(self):
return ('我是{},我有{}'.format(self.name,self.hair))
Xiaolang = Human('小浪宝宝',2,2,'黑色的头发')
print(Xiaolang)
输出:
我是小浪宝宝,我有黑色的头发
如果不加 __str__() 方法,打印实例名将输出<__main__.Human object at 0x0000025084845910> ,表示他是 Human 类的实例,object 表示它是一个对象。但是还是不知道 Xiaolang 这个实例是干什么的,可以在 Human 类里另加一个 intro() 方法,通过方法的调用(实例名.方法名())打印类的描述。
3.面向对象和面向过程的区别
与面向对象相对应的是面向过程。
面向过程 | 把一个问题拆分成一个个步骤,然后用函数实现各个步骤,依次调用解决问题 |
面向对象 | 把一个问题拆分成各个对象,建立对象的目的不说未来完成一个步骤,而是为了描述某个事物在解决问题的步骤中的行为和特征。 |
比如要处理学生的成绩,将学生的姓名和成绩打印出来,用面向过程的思维可以这样写:
#1.用字典存储姓名和分数
student1 = {'name': '小浪', 'score': 96}
student2 = {'name': '小倩', 'score': 100}
#2.定义打印信息的函数
def print_infor(student):
print('姓名: %s,分数:%d'%(student['name'],student['score']))
#3.调用打印信息的函数
print_infor(student1)
print_infor(student2)
用面向对象(使用类),可以这样写:
#1.定义学生类
class Student:
def __init__(self, name, score):
self.name = name
self.score = score
def print_infor(self):
print('姓名:%s,分数:%d'%(self.name, self.score))
#2.实例化学生类
student1 = Student('小浪',96)
student2 = Student('小倩',100)
#调用实例的方法
student1.print_infor()
student2.print_infor()
面向过程是动作(函数)为主体,对象(上面程序里学生)作为参数传递给函数。而面向对象是以对象为主体,动作和特征分别是对象的方法和属性。用代码来描述就是,面向过程:动作(对象);面向对象:对象.动作()。
使用面向对象的思维方式的好处是:程序的可读性、可扩展性、可维护性高。与面向过程相辅相成,分情况进行使用。
面向对象 | 面向过程 | |
---|---|---|
区别 | 实物比较复杂,使用简单的线性思维无法解决 | 事物比较简单,可以用线性的思维去解决 |