1、一个对象的属性可以是另外一个类创建的对象。
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))
ak47 = Gun("AK47")
#ak47.add_bullet(50)
#ak47.shoot()
class Soldier:
def __init__(self, name):
self.name = name
self.gun = None
def fire(self):
if self.gun is None:
print("[%s] has no gun"%self.name)
return
print("冲啊。。。")
self.gun.add_bullet(50)
self.gun.shoot()
m = Soldier("LanBo")
m.gun = ak47
m.fire()
2、私有属性就是对象不希望公开的属性,私有方法就是对象不希望公开的方法。
3、属性名或方法名前加两个下划线就变成了私有的。
class Girl:
def __init__(self, name):
self.name = name
self.__age = age
def __secret(self):
# 在对象的方法内部,是可以访问对象的私有属性的
print("%s 的年龄是 %d" %(self.name, self.__age))
jingjing = Girl("xiangyi", 18)
# 私有属性在外界不能够被直接访问
# 私有方法,通用不允许在外界直接访问
4、类的三大特性
- 封装,将方法和属性封装在抽象的类中;
- 继承,实现代码的重用;
- 多态,不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度。
5、继承:子类拥有父类的所有属性和方法。
6、继承语法:
class 类名(父类名):
pass #占位符
7、方法的重写,父类的方法不能满足子类的需要。
class Dog:
def eat(self):
print("eat")
def drink(self):
print("drink")
def run(self):
print("run")
def sleep(self):
print("sleep"
def bark(self):
print("bark")
class XiaoTianQuan(Dog):
def fly(self):
print("fly")
def bark(self):
#如果子类中重写了父类的方法
#在使用子类对象调用方法时,会调用子类重写的方法
print("ffafsdjfajdsjaj")
xtq = XiaoTianQuan()
8、对父类方法进行扩展,子类的方法实现包含父类的方法实现,父类原本封装的方法实现是子类方法的一部分,使用super().父类方法 来调用父类方法的执行。
class XiaoTianQuan(Dog):
def fly(self):
print("fly")
def bark(self):
1、针对子类特有需求,编写代码
print("ffafsdjfajdsjaj")
2、使用super(),调用原本在父类的方法
super().bark()
3、增加其他子类diamond
print("lsieslj jfjjfsji")
9、多继承可以让子类对象,同时具有多个父类的属性和方法。
10、内置属性 __mro__可以查看方法搜索顺序。
11、object类是python3中所有类的基类。
12、多态以继承和重写父类方法为前提,是调用方法的技巧,不会影响到类的内部设计。