Python面对对象
Python面对对象之初始化方法
当使用 类名() 创建对象时,会 自动 执行以下操作:
1.为对象在内存中 分配空间 —— 创建对象
2.为对象的属性 设置初始值 —— 初始化方法(init)
这个初始化方法 就是 __init__ 方法,__init__ 是对象的内置方法
__init__ 方法是 专门 用来定义一个类 具有哪些属性的方法!
_int_方法的使用
在 Cat 中增加 init 方法,该方法在创建对象时会被自动调用
class Cat:
"""这是一个猫类"""
def __init__(self):
print("初始化方法")
tom = Cat()
输出:
初始化方法
与_int_方法对比对比
class Cat:
def eat(self):
print("%s 爱吃鱼" % self.name)
tom = Cat()
输出:
在初始化方法-类内部定义属性(类内部封装)
类内部封装方法二、
在 __init__ 方法内部使用 self.属性名 = 属性的初始值 就可以 定义属性
定义属性之后,再使用 Cat 类创建的对象,都会拥有该属性
class Cat:
def __init__(self):
print("hhhhh")
# 定义用 Cat 类创建的猫对象都有一个 name 的属性
self.name = "YAN"
def eat(self):
print("%s 爱吃鱼" % self.name)
# 使用类名()创建对象的时候,会自动调用初始化方法 __init__
tom = Cat()
tom.eat()
输出:
hhhhh
YAN 爱吃鱼
改造初始化方法 —— 初始化的同时设置初始值(就是通过外部传参给类内部)
在开发中,如果希望在 创建对象的同时,就设置对象的属性,可以对 init 方法进行改造
把希望设置的属性值,定义成 __init__ 方法的参数
在方法内部使用 self.属性 = 形参 接收外部传递的参数。
【只有需要从外部传入的参数,才需要把这些参数定义成初始化方法的形参,如果某些参数不需要外部传递,就不需要额外增加那些参数,直接 self.属性 = 设定的某初始值】
在创建对象时,使用类名(属性1, 属性2...) 调用
class Cat:
def __init__(self, name):
print("hhh %s" % name)
self.name = name
tom = Cat("Tom")
lazy_cat = Cat("大懒猫")
输出:
hhh Tom
hhh 大懒猫
定义没有初始值的属性
在定义属性时,如果 不知道设置什么初始值,可以设置为 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
print("冲啊...[%s]" % self.name)
self.gun.add_bullet(50)
self.gun.shoot()
# 创建枪对象
ak47 = Gun("AK47")
# 创建士兵
yan = Soldier("yan")
yan.gun = ak47
yan.fire()
输出:
冲啊...[yan]
[AK47] 突突突... [49]