文章目录
一、面向对象编程的基础
如果在此之前你没有接触过面向对象编程,那么在阅读这篇文章之前,你需要了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程。
(如果在此你不能理解这些定义或者理解起来很吃力,不用担心,我们在后面的应用中会详细讲解这些概念,这些只是让你对面向对象编程所涉及到的内容有一些初步的认识)
面向对象技术简介:
(1) 类(class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
(2)对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法
(3)方法:类中定义的函数
(4)类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
(5)实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。
(6)数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
(7)方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
(8) 局部变量:定义在方法中的变量,只作用于当前实例的类。
(9)继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。(这个会在后面着重讲)(在讲继承时会讲多态,多态的概念比较抽象,后面我们用操作实例来理解多态)
(10)实例化:创建一个类的实例,类的具体对象。
对象可以包含任意数量和类型的数据。
二、类的结构
类的结构:
术语------实例
1.使用面向对象开发,第一步是设计类
2.使用 类名() 创建对象,创建对象的动作有两步
1.在内存中为对象分配空间
2.调用初始化方法__init___ 为对象初始化
3.对象创建后,内存中就有了一个对象的实实在在的存在--实例
因此:
1.创建出来的对象叫做类的实例
2.创建对象的动作叫做实例化
3.对象的属性叫做实例属性
4.对象调用的方法叫做实例方法
在程序执行时:
1.对象各自拥有自己的实例属性
2.调用对象的方法,可以通过self:
访问自己的属性
调用自己的方法
结论:
1.每一个对象都有自己独立的内存空间,保存各自不同的属性
2.多个对象的方法,在内存中之有一份,在调用方法时,
需要把对象的引用传递到方法内部
三、面向对象编程
(1)类定义
语法格式如下:
class Classname:
pass
class后面紧接着是类名,类名通常是大写开头的单词。
类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性。
(2)类对象
self:
哪一个对象调用的方法,self就是哪一个对象的引用(指向对象的内存地址空间)
在调用方法的时候,程序员不需要传递self参数(定义的时候 第一个参数必须是self)
类对象创建后,类命名空间中所有的命名都是有效属性名。所以如果类定义是这样:
class MyClass:
"""一个简单的类实例"""
i = 12345
def func(self):
return 'hello world'
#实例化类
x = MyClass()
#访问类的属性和方法
print("MyClass 类的属性 i 为:", x.i)
print("MyClass 类的方法 func 输出为:", x.func())
(3)类方法
在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数,self 代表的是类的实例,而非类。
#类定义
class People:
#定义基本属性
name = ''
age = 0
#定义构造方法
def __init__(self,nane,age,weight):
self.name = name
self.age = age
self.__weight = weight
def speak(self):
print("%s 说: 我 %d 岁。" %(self.name,self.age))
#实例化类
p = people('chen',10,30)
p.speak()
初始化方法
类名() 就可以创建一个对象
类名() 创建对象的时候,python解释器会自动执行以下操作
1.为对象在内存中分配空间–创建对象
2.调用初始化方法为对象的属性设置初始值
这个初始化方法是内置方法,是专门用来定义一个类据有哪些属性和方法的
class Cat:
def __init__(self,new_name):
#print('这是一个初始化方法')
self.name = new_name
def eat(self):
print('%s 爱吃鱼' %(self.name))
#pass
def drink(self):
print('猫要喝水')
tom = Cat('Tom')
print(tom)
tom.eat()
hk = Cat('Hellokitty')
print(hk)
hk.eat()
(_str _)
在python中 使用print输出对象变量时候,默认情况下
会输出这个变量引用的对象是由哪一个类创建的对象以及在内存中的地址
如果在开发中,希望使用print输出变量的时候,能够打印自定义内容
就可以利用__str__这个内置的方法了
class Cat:
def