类
我们通过一个类的实例来看类是怎么回事
class Animals():
def est(self):
print('chi')
def sleep(self):
print('sleep')
dog = Animals() # 创建对象
dog.sleep() # 调用行为
# 也可以给dog增加属性 但是不推荐
dog.name='11'
print(dog.name)
- class 来定义类,def来定义函数
dog = Animals()
创建一个动物的实例dog.sleep()
通过句号表示法来调用类中定义的方法
运行结果:
看个复杂点的例子:
class Dog():
def __init__(self, name, age): # 构造方法、初始化方法
"""初始化属性name和age"""
self.name = name
self.age = age
def set(self):
"""模拟小狗被命令史蹲下"""
print(self.name.title() + "is now sitting")
def roll_over(self):
"""模拟小狗被命令时打滚"""
print(self.name.title() + "rolled over!")
my_dog = Dog('willie', 6)
print(my_dog.name.title())
my_dog.set()
-
在python中,首字母大写的名称表示类 首字母小写或者首字母小写加下划线表示函数
-
方法__init__()是一种特殊的方法每当你根据Dog类创建新实例时,python在创建对方的时候自动运行他。在这个方法的定义中形参self必不可少,并且必须位于其他形参的前面。python会自动调用__init__()方法来创建Dog实例时,将自动传入实参self。每个与类相关联的方法调用都会自动传递实参self
-
def __init__(self, name, age):
Dog类中有三个形参self和name和age
其中self不需要传递值
my_dog = Dog('willie', 6)
形参name对应的实参是‘willie’
形参age对应的实参是6 -
self.name = name
获取形参name中的值,并将其储存在变量name中,然后该变量被关联到当前创建的实例中 -
my_dog = Dog('willie', 6)
这是创建一个特定小狗的实例,并且使用我们提供的值来设置属性name和age -
print(my_dog.name.title())
访问属性。用句号表示法,句号表示法在python很常用 -
my_dog.set()
调用方法。可以使用句号表示法来调用Dog类中定义的任何方法
运行结果:
练习写一个房子类:
class Home():
def __init__(self, home_area, home_type):
self.home_area = home_area
self.home_type = home_type
def in_home(self, num):
print('入住了%d人' % num)
def desc(self):
print('房间{}平米,类型{}'.format(self.home_area, self.home_type))
home = Home(180, '三室一厅')
home.in_home(3)
home.desc()
练习写个士兵突击:
class Gun():
def __init__(self, name):
self.name = name
self.num = 0
def add_bullet(self, num):
self.num += num
def fire(self, diren):
self.num = self.num - 1
diren.kill()
print('向%s开火,还剩%d发子弹' % (diren.name, self.num))
class Soldier():
def __init__(self, name, gun=None):
self.name = name
self.gun = gun
self.shengmingzhi = 100
def open_fire(self, diren):
if self.gun is not None:
self.gun.fire(diren)
else:
print('没有枪')
def kill(self):
self.shengmingzhi = self.shengmingzhi - 10
if self.shengmingzhi <= 0:
print('挂了')
else:
print('还剩%d' % self.shengmingzhi)
ak47 = Gun('ak47')
ak47.add_bullet(50)
li = Soldier('李大哥', ak47)
diren = Soldier('敌人')
li.open_fire(diren)
li.open_fire(diren)
li.open_fire(diren)
li.open_fire(diren)
介绍一个__str__
方法
class Person():
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return self.name
def eat(self):
print('吃饭')
def sleep(self):
print('睡觉')
xm = Person('小明', 12)
print(xm)
print(xm.name)
__str__
必须有返回值,并且只能返回字符串- 当调用实例本身时返回填写在return中的内容
运行结果: