面向对象:
1. 面向对象编程介绍;
2. 为什么要用面向对象进行开发
3. 面向对象的特性:封装,继承,多态,
4. 类,方法
面向对象
1. 介绍:
1. 面向对象编程介绍;
2. 为什么要用面向对象进行开发
3. 面向对象的特性:封装,继承,多态,
4. 类,方法
面向对象
1. 介绍:
编程: 程序员用特定的语法,数据结构,算法组成的代码告诉计算机如何执行任务的过程。
程序: 一个程序员为得到一个任务结果而编写的一组指令的集合;
编程范式:实现一个任务的方式有很多种不同的方式,对这些不同的方式的特点进行归纳总结得出的编程方式类别
不同的编程范式本质上代表对各类型的任务采取的不同的解决问题的思路;大多数语言只支持一种编程范式。
最重要的两种编程范式:面向过程编程和面向对象编程,还有一个函数式编程;
面向过程procedural Programming:程序从上到下一步一步的执行;
面向对象:Object Oriented Programming
简称OOP,利用“类”和“对象”来创造各种模型来实现对真实世界的描述;
1>. 程序维护和扩展相对简单;
2>. 可以大大提高程序开发效率;
世界万物,皆为分类
世界万物,皆为对象
只要式对象,就肯定属于某种品类
只要式对象,就肯定有属性(名字)
2. 特性:
class类:
一个类即对一类拥有相同属性的对象的抽象,蓝图,原型,在类中定义了这些对象的都具备属性,共同大方法。
object:
一个对象即一个类的实例化后实例,一个类必须经过实例化后方可在程序中调用,一个类可以实例化多次,每个对象亦
可以有不同的属性
封装:
在类中对数据的赋值,内部调用对外部用户式透明的,这使得类变成了一个胶囊或容器,里面包含的类的数据和方法;
继承:
一个类可以派生出子类,在这个父类里定义的属性,方法自动被子类继承。
多态:
态使面向对象的重要特性,简单的说“一个接口,多种实现”
指一个基类中派生出了不同的子类,且每个子类在继承了同样的方法名的同时又对父类的方法做了不同的实现,
这就是同一种十五表现出来的多种形态。
程序: 一个程序员为得到一个任务结果而编写的一组指令的集合;
编程范式:实现一个任务的方式有很多种不同的方式,对这些不同的方式的特点进行归纳总结得出的编程方式类别
不同的编程范式本质上代表对各类型的任务采取的不同的解决问题的思路;大多数语言只支持一种编程范式。
最重要的两种编程范式:面向过程编程和面向对象编程,还有一个函数式编程;
面向过程procedural Programming:程序从上到下一步一步的执行;
面向对象:Object Oriented Programming
简称OOP,利用“类”和“对象”来创造各种模型来实现对真实世界的描述;
1>. 程序维护和扩展相对简单;
2>. 可以大大提高程序开发效率;
世界万物,皆为分类
世界万物,皆为对象
只要式对象,就肯定属于某种品类
只要式对象,就肯定有属性(名字)
2. 特性:
class类:
一个类即对一类拥有相同属性的对象的抽象,蓝图,原型,在类中定义了这些对象的都具备属性,共同大方法。
object:
一个对象即一个类的实例化后实例,一个类必须经过实例化后方可在程序中调用,一个类可以实例化多次,每个对象亦
可以有不同的属性
封装:
在类中对数据的赋值,内部调用对外部用户式透明的,这使得类变成了一个胶囊或容器,里面包含的类的数据和方法;
继承:
一个类可以派生出子类,在这个父类里定义的属性,方法自动被子类继承。
多态:
态使面向对象的重要特性,简单的说“一个接口,多种实现”
指一个基类中派生出了不同的子类,且每个子类在继承了同样的方法名的同时又对父类的方法做了不同的实现,
这就是同一种十五表现出来的多种形态。
3. 语法:
class Dog:
def __init__(self, name):
self.name = name
def bulk(self):
print("%s Wang wang wang!!" % self.name)
d1 = Dog("Brace") #实例化一只狗:
d2 = Dog("Kitty")
d2 = Dog("Lucy")
d1.bulk()
d2.bulk()
d2.bulk()
class Dog:
def __init__(self, name):
self.name = name
def bulk(self):
print("%s Wang wang wang!!" % self.name)
d1 = Dog("Brace") #实例化一只狗:
d2 = Dog("Kitty")
d2 = Dog("Lucy")
d1.bulk()
d2.bulk()
d2.bulk()
构成包括以下:
1. 属性
2. 方法
3. 构造函数
4. 析构函数
私有方法:
私有属性:
类变量:
实例变量:
案例分解:
class Role(object):
n = 123 #类变量
def __init__(self, name, role, weapon, life_value=100, money=15000):
# 构造函数
# 在实例化时做一些类的初始化的功能
self.name = name
self.role = role
self.weapon = weapon
self.life_value = life_value
self.money = money
# 这些变量都赋值了给实例,所以叫实例变量;
# 实例变量的作用域就是实例本身,不用共享
# 实例变量又称静态属性
def shot(self):
print("shooting...")
#类的方法,即类的功能,相对一个过程,又称动态属性;
def got_shot(self):
print("ah.....,I got shot...")
def buy_gun(self, gun_name):
print("%s just bought %s" % (self.name, gun_name))
r1 = Role("Brace", "Police", "AK47")
#调用的过程,即实例化,又可以称为初始化一个类
# 实例化一个对象后,又称为类实例
r1.name = "中国" # 修改初始化属性;
r1.bullet_prove = True # 增加新属性
del r1.weapon # 删除属性
当类变量和实例变量时,优先级时实例变量
r2 = Role("Kitty", "Terrorist", "B22")
1. 属性
2. 方法
3. 构造函数
4. 析构函数
私有方法:
私有属性:
类变量:
实例变量:
案例分解:
class Role(object):
n = 123 #类变量
def __init__(self, name, role, weapon, life_value=100, money=15000):
# 构造函数
# 在实例化时做一些类的初始化的功能
self.name = name
self.role = role
self.weapon = weapon
self.life_value = life_value
self.money = money
# 这些变量都赋值了给实例,所以叫实例变量;
# 实例变量的作用域就是实例本身,不用共享
# 实例变量又称静态属性
def shot(self):
print("shooting...")
#类的方法,即类的功能,相对一个过程,又称动态属性;
def got_shot(self):
print("ah.....,I got shot...")
def buy_gun(self, gun_name):
print("%s just bought %s" % (self.name, gun_name))
r1 = Role("Brace", "Police", "AK47")
#调用的过程,即实例化,又可以称为初始化一个类
# 实例化一个对象后,又称为类实例
r1.name = "中国" # 修改初始化属性;
r1.bullet_prove = True # 增加新属性
del r1.weapon # 删除属性
当类变量和实例变量时,优先级时实例变量
r2 = Role("Kitty", "Terrorist", "B22")
r1.buy_gun("AK47")
如果在一个实例中修改类变量,作用域就只能在这个实列中生效,因为内存地址变化了
实际上在实例中新增了一个类变量,只是在实例中新增了一个与类变量名称相同的实列变量
如果类变量时是一个列表或是其他动态数据类型
在实例中修改类变量,则是全局的,因为变量的内存地址并没有发生改变。
如果在一个实例中修改类变量,作用域就只能在这个实列中生效,因为内存地址变化了
实际上在实例中新增了一个类变量,只是在实例中新增了一个与类变量名称相同的实列变量
如果类变量时是一个列表或是其他动态数据类型
在实例中修改类变量,则是全局的,因为变量的内存地址并没有发生改变。
把一个类变成一个具体对象的过程叫实例化
类变量可以不用实例即可以直接调用,也可以实例化后,用实例也可以直接调用
类变量的用途:大家公用的属性,节省开销
class Person(object):
cn = "中国"
def __init__(self, name, age, gender, address)
self.name = name
self.age = age
self.gender = gender
self.address = address
#析构函数:
def __del__(self):
print("%s 彻底死了" % self.name)
p1 = Person("Kitty", 22, "male", "Shanghai China!" )
类变量可以不用实例即可以直接调用,也可以实例化后,用实例也可以直接调用
类变量的用途:大家公用的属性,节省开销
class Person(object):
cn = "中国"
def __init__(self, name, age, gender, address)
self.name = name
self.age = age
self.gender = gender
self.address = address
#析构函数:
def __del__(self):
print("%s 彻底死了" % self.name)
p1 = Person("Kitty", 22, "male", "Shanghai China!" )
析构函数:
在实例释放或销毁的时候自动执行的,通常用于做些扫尾工作
如关闭一些数据库连接,打开的临时文件。
其实析构函数定义不定义,都会执行,定义相当重构
def __del__(self):
print("%s 彻底死了" % self.name)
在程序退出时,自动退出!
私有方法:
def __bulk(self): #格式就是前面加2个下划线
print("%s Wang wang wang!!" % self.name)
私有属性:
self.__name = name #这样就变为私有属性
def __del__(self):
print("%s 彻底死了" % self.name)
在程序退出时,自动退出!
私有方法:
def __bulk(self): #格式就是前面加2个下划线
print("%s Wang wang wang!!" % self.name)
私有属性:
self.__name = name #这样就变为私有属性
继承:
对构造函数进行重构
class People(object):
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self):
print("%s is eating ...." % self.name)
class Men(People):
def __init__(self, name, age, momey):
People.__init__(self, name, age) #对构造函数进行重构,
# super(Men,self).__init__(name,age) #跟上面功能是一样的
self.momey =momey
def sleep(self):
print("%s is sleeping" % self.name)
class Wemen(People):
def xx(self):
print("===================")
t1 = Men("Brace", 29, 23) #初始化也就是调用构造函数:__init__(self)
t1.sleep()
print(t1.momey)
t2 = Wemen("Lucy", 23)
t2.xx()