|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 极品召唤兽 于 2020-8-17 21:21 编辑
类与实例
编程与生活是相通的,我们生活中把事物按 类 划分,比如人类、狗类、动物类、植物类等。在编程世界里,同样也分了很多 类,比如字符串、整数、浮点数等,我们用 type() 函数验证一下。
在 Python 中 类 是无数个相似个体的集合,其中的每个个体叫做 实例。
类的创建
我们以人类来举例,人类都有哪些共同点呢?两条胳膊、两条腿、直立行走、有着各种颜色的头发、说着各式各样的语言等。这些共同点分为两类:
特征:两条胳膊、两条腿、有着各种颜色的头发
行为:直立行走、说着各式各样的语言
在 Python 的类中,我们把这种特征和行为分别称为 属性(attribute)和 方法(method)。现实生活中的“类”是我们归纳总结出来的,而 Python 中的类需要我们自行创建。接下来我们看看如何创建一个类。
class Human:
arms = 2
legs = 2
hair = '各种颜色的头发'
def walk(self):
print('直立行走')
def speak(self):
print('说着各式各样的语言')
类的 属性 的创建和变量的定义是一样的,类的 方法 的创建和函数的定义也很类似。唯一不同的是:类的 方法 中有个必须放在首位的参数 self,它表示创建的实例本身。至于为什么需要这个 self,我们后面细说。
类的调用
class Human:
arms = 2
legs = 2
hair = '各种颜色的头发'
def walk(self):
print('直立行走')
def speak(self):
print('说着各式各样的语言')
# 类的实例化
human = Human()
print(human.arms)
# 输出:2
print(human.legs)
# 输出:2
print(human.hair)
# 输出:各种颜色的头发
human.walk()
# 输出:直立行走
human.speak()
# 输出:说着各式各样的语言
我们实例化后得到实例 human 后,实例 human 就拥有了 Human 类的所有 属性 和 方法。然后我们通过 实例名.属性名 和 实例名.方法名 去调用它们。
class Human:
arms = 2
legs = 2
hair = '各种颜色的头发'
def walk(self):
print('直立行走')
def speak(self):
print('说着各式各样的语言')
def intro(self):
# 类的方法里访问类的变量
print('人类有%d条胳膊%d条腿' % (self.arms, self.legs))
# 类的实例化
human = Human()
human.intro()
# 输出:人类有2条胳膊2条腿
在 Python 的类中,有一种特殊的方法——初始化方法。它的格式是 def __init__(self):,方法名由 init(initialize 的缩写,初始化的意思)加左右两边的 双下划线 组成。
注意:初始化方法的 init 前后各有 两个 下划线,是 __init__ 而不是 _init_。
初始化方法的特殊之处是:每当进行类的实例化时,初始化方法会自动被执行。我们看个例子:
class Human:
def __init__(self):
print('Hi,我是 Human 类的初始化方法')
human = Human()
# 输出:Hi,我是 Human 类的初始化方法
我们通常会在 初始化方法 里完成类属性初始值的设置
class Human:
def __init__(self):
# self.不能丢
self.arms = 2
self.legs = 2
self.hair = '各种颜色的头发'
def walk(self):
print('直立行走')
def speak(self):
print('说着各式各样的语言')
human = Human()
print(human.hair)
# 输出:各种颜色的头发
除了进行固定的初始值设置,初始化方法 可以接收其他参数,进行自定义的属性初始值设置。我们再看个例子
class Human:
def __init__(self, name, arms, legs, hair):
# self.不能丢
self.name = name
self.arms = arms
self.legs = legs
self.hair = hair
def walk(self):
print('直立行走')
def speak(self):
print('说着各式各样的语言')
def intro(self):
print('我叫{},我有{}'.format(self.name, self.hair))
xiaobei = Human('小贝', 2, 2, '粉红色的头发')
print(xiaobei.name)
# 输出:小贝
xiaobei.intro()
# 输出:我叫小贝,我有粉红色的头发
实例演练
class Human:
# 在这里补充初始化方法
def __init__(self,name,heads,arms):
self.name = name
self.heads = heads
self.arms = arms
def intro(self):
print('我叫{},我有{}头{}臂'.format(self.name, self.heads, self.arms))
nezha = Human('哪吒',3,6)
nezha.intro()
可以看到,有了 __str__() 方法,直接打印实例的结果为 __str__() 方法的返回值。因此,我们可以使用 __str__() 方法来描述一个类。
面向对象与面向过程
面向过程# 1.用字典存储姓名和分数
student1 = {'name': '小贝', 'score': 98}
student2 = {'name': '闻闻', 'score': 93}
# 2.定义打印分数的函数
def print_score(student):
print('姓名:%s,分数:%d' % (student['name'], student['score']))
# 3.调用打印分数的函数
print_score(student1)
print_score(student2)
面向对象
# 1.定义学生类
class Student:
def __init__(self, name, score):
self.name = name
self.score = score
def print_score(self):
print('姓名:%s,分数:%d' % (self.name, self.score))
# 2.实例化学生类
student1 = Student('小贝', 98)
student2 = Student('闻闻', 93)
# 3.调用实例的方法
student1.print_score()
student2.print_score()
例子
from random import randint
class Lottery:
def __init__(self, times):
# 号码个数
self.times = times
# 中奖号码池
self.lottery = []
def draw_lottery(self):
for i in range(0, self.times):
number = randint(0, 99)
self.lottery.append(number)
def print_lottery(self):
print('本期彩票中奖号码为:%s' % self.lottery)
# 实例化,抽 6 个号码
lottery = Lottery(6)
# 抽奖
lottery.draw_lottery()
# 开奖
lottery.print_lottery()
|
评分
-
查看全部评分
|