面向对象三大特性:
(一)封装:根据职责将属性和方法封装到一个抽象的类中(定义类的准则)
- 1.封装是面向对象编程的一大特点
- 2.面向对象编程的第一步--将属性和方法封装到一个抽象的类中
- 3.外界使用类创建对象,然后让对象调用方法
- 4.对象方法的细节都被封装在类的内部
一个对象的属性可以是另一个类创建的对象
1.开发枪类
2.开发士兵类
定义没有初始值的属性,在定义属性时,如果不知道设置什么初始值,可以设置为None
-
None关键字表示什么都没有
-
表示一个空对象,没有方法和属性,是一个特殊的常量
-
可以将None赋值给任何一个对象
class Gun:
def __init__(self, model):
self.model = model
self.bullet_count = 0
def add_bullet(self, count):
self.bullet_count += count
def shoot(self):
if self.bullet_count <= 0:
print("%s 没有子弹" % self.model)
return
self.bullet_count -= 1
print("%s突突突 %d" % (self.model, self.bullet_count))
class Soldier:
def __init__(self, name):
self.name = name
self.gun = None
def fire(self):
if self.gun == None:
print("%s 还没有枪" % self.name)
return
self.gun.add_bullet(50)
self.gun.shoot()
pass
ak47 = Gun("AK47")
xusanduo = Soldier("许三多")
xusanduo.gun = ak47
xusanduo.fire()
身份运算符:
身份运算符用于比较两个对象的内存地址是否一致--是否是对同一个对象的引用
-
在python中针对None比较时,建议用 is 判断
-
is和==的区别:
is用于判断两个变量引用对象是否为同一个
==用于判断引用变量的值是否相等
私有属性和私有方法
应用场景:
-
在实际开发中,对象的某些属性或方法可能只希望在对象内部被使用,而不希望在外部被访问到
-
私有属性就是对象不希望公开的属性
-
私有方法就是对象不希望公开的方法
定义方式:
在定义属性或方法时,在属性名或方法名前加两个下划线,定义的就是私有属性或方法
self.__age
def __secret(self)
伪私有属性和私有方法(科普)
(二)继承:实现代码的重用,想用的代码不需要重复的编写。子类拥有父类的所有方法和属性。(设计类的技巧,子类针对自己特有的需求,编写特定的代码)
专业术语:
继承的传递性:子类拥有父类以及父类的父类中封装的所有方法和属性。
方法的重写:当父类的方法实现不能满足子需求时,可以对方法进行重写
-
覆盖父类的方法
-
对父类方法进行扩展
多继承:可以让子类对象,同时具有多个父类的属性和方法
-
注意事项:如果父类之间存在同名的属性或方法,应该避免使用多继承。
class 子类名(父类名1,父类名2,...)
pass
(三)多态:不同的子类对象调用相同的父类方法,产生不同的执行结果,增加代码的灵活度。
-
以继承和重写父类方法为前提
-
是调用方法的技巧,不会影响到类的内部设计
类
类定义:
举例:
属性:类属性(top_score)、实例属性(player_name)
方法:静态方法(show_help)、类方法(show_top_score)、实例方法(start_game)
调用类中不同的方法: