面向对象编程
面向对象编程与面向过程编程的区别
面向过程的核心就是过程,即解决问题的步骤。就如同工厂的流水线生产。
面向对象的核心就是对象,即将所有事物都看成是一个对象,这些对象都是一个个的属性与方法组成的,更类似于功能的直接赋予。
面向对象主要解决面向过程的拓展性差。但是衡量一款软件好坏的因素不是简简单单的一个拓展性,而是一系列的成本、性能、可靠性等等等等。。。
类与对象
对象是属性与方法的结合体,而类便是对象的一系列模板。
例如:动物这个类别,世界上许许多多的事物都可以称之为动物,并且我们可以由动物这一个模板分出许许多多的对象(猫、狗、鱼、狮子、大象),这些都可以统称为动物,但他们又是动物的一个一个“实例”。
在程序中我们是先定义一个类,即对象的一个模板,类中是对对象的共同属性与方法的一个归纳。
而后我们才会根据这个模板来生成对应的对象。
定义类
通过上面的简单了解我们来尝试下定义一个类
#class关键字 类名:
# pass
class HuMan:
pass
##这就是一个最简单的一个对象的定义方式
对象的实例化
class MyClass:
"""一个简单的类实例"""
i = 12345
def f(self):
return 'hello world'
# 实例化类
x = MyClass()
# 访问类的属性和方法
print("MyClass 类的属性 i 为:", x.i) # MyClass 类的属性 i 为: 12345
print("MyClass 类的方法 f 输出为:", x.f()) # MyClass 类的方法 f 输出为: hello world
类中有一个名为__init__()的方法,类的实例化就会自动调用__init__()方法。
但是我们上面的程序并没有写这个方法为什么还可以对类进行实例化呢?
这是因为当我们创建类的时候它便是默认存在的。相对的你也可以自己定义这个方法,对这个方法进行修改,添加形参,使得实例化对象的时候可以传递参数。
class Complex:
def __init__(self, realpart, imagpart):
self.r = realpart
self.i = imagpart
x = Complex(3.0, -4.5)
print(x.r, x.i) # 3.0 -4.5
其中的self是代表类的实例,并非类本身。
类的方法与函数的区别便是,方法必须有一个额外参数,即self(默认使用这个名字,也可以使用其他名字),它代表的是类的实例对象。
类方法
定义在类内部的方法:
- 如果类来调用:就是一个普通函数,有几个参数就需要传几个参数
- 对象来调用:它叫对象的绑定方法,第一个参数不需要传,自动传递
#类定义
class people:
#定义基本属性
name = ''
age = 0
#定义私有属性,私有属性在类外部无法直接进行访问
__weight = 0
#定义构造方法
def __init__(self,n,a,w):
self.name = n
self.age = a
self.__weight = w
def speak(self):
print("%s 说: 我 %d 岁。" %(self.name,self.age))
# 实例化类
p = people('runoob',10,30)
p.speak() # runoob 说: 我 10 岁。