打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
第12关笔记

1、类与对象

1-1、类的定义

①、类:各个种类,如电子类、家具类、服饰类、食品类……;

②、实例:类的个例就叫做实例 (instance),可理解为“实际的例子”。

2、类的创建和调用

2-1、类的创建

①、类的创建:class+类名+冒号

class leiming():
pass #这里记得缩进

②、类的属性创建:通过赋值语句

#下面的 a 是变量
a=1
#下面的 a 是类 A() 的属性
clas A():
a=1

③、实例方法的创建:def + 方法名(self)(重点:self 代表着实例化对象

#下面的 B() 是函数
def B():
pass
#下面的 B() 是类 A() 的方法 B()
class A():
def B(self):
pass

2-2、类的调用【】

如下例子:

class teacher():
name='延君'
def work(self):
print('learning ~~~')
t=teacher()
print(t.name)
t.work()

①、第 5 行 “t=teacher()” 指实例化类 teacher ,其中 t 为实例化对象(即 self = t );

②、第 6 行 “print(t.name)” 指调用了实例化对象的属性 name;

③、第 7 行 “t.work()” 指调用了实例化对象的方法 work。

3、类创建的关键点

3-1、self(代表着实例化对象本身)

self 是所有实例的替身(这是替身攻击!!!)

①、类的方法内部调用其他方法时,我们也需要用到 self 来代表实例

class A():
def B(self):
print(self)
a=A()
a.B()

上面代码执行后,终端输出的结果为 <__main__.A object at 0x000001B29C851080> ,即我们的 self 代表着类 A 的实例化对象 a。

②、类中用 def 创建方法时,就必须把第一个参数位置留给 self,并在调用方法时忽略它(不用给self传参)

③、类的方法内部想调用类属性或其他方法时,就要采用 self.属性名 self.方法名 的格式

class A():
name='延君'
def B(self):
print('助教的名字是'+self.name)
a=A()
a.B()

3-2、初始化方法

①、格式定义:def __init__(self),是由 init 加左右两边的【双】下划线组成

②、作用:当每个实例对象创建时,该方法内的代码无须调用就会自动运行

class A():
def __init__(self):
print('我是最帅的助教,没有之一')
a=A()

以上初始化函数无需调用,一实例化直接运行。

③、利用这个特性,在编写习惯上,我们会在初始化方法内部完成类属性的创建,为类属性设置初始值,这样类中的其他方法就能直接、随时调用

4、习题分享

①、题目:下面的代码中,为什么函数A内的函数B执行后,再在第 4 行中定义呢?

def A():
B()
print('我劝你学python')
def B():
print('人生苦短')
def main():
A()

main()

解析:上方代码中,我们的顺序是定义函数 A,定义函数 B,定义函数 main,最后再来执行我们的 函数 main ,而在定义的期间是不执行函数的。

②、self 函数的调用

class A():
def Name(self):
print('我是最帅的助教{},没有之一'.format(self.name))
def Work(self):
print('最爱催课')
a=A()
a.name='延君'
a.Name()
a.Work()

以上代码中,从第 6 行开始讲解,我们实例化了类 A 并创建实例对象 a ,给实例化对象 a 创建了属性 name 并赋值 ‘延君’。我们调用类中的 Name 方法后,便打印出了我么的语句。

③、初始化方法 __init__ 函数

class A():
def __init__(self,name):
self.name=name
def Day(self):
print('今天是{}催课的第三天了'.format(self.name))
a=A('延君')
a.Day()

以上代码中,我们实例化了类 A 并赋予了值 ‘延君’,因为实例化了,所以初始化函数 init 默认执行,并把 ‘延君’ 给实例化对象 a 的属性 name,从而我们调用方法 Day 时正常输出 “今天是延君催课的第三天了” 。

这里 self.name=name 要注意的是,self.name 是实例化对象的 name,而后者是函数中的参数 name ,两者定位不同。即我们可以写为 self.mingzi = name,则我们调用时也需要写为 self.mingzi

④、__str__函数(知识拓展)

class A():
def __init__(self,name):
self.name=name
def __str__(self):
return '我是{}'.format(self.name)

a=A('延君')
print(a)

在python中方法名如果是__xxxx__()的,那么就有特殊的功能,因此叫做“魔法”方法,其中 __str__方法需要返回一个字符串,当做这个对象的描写,也是实例化后便执行的方法。

5、小练习

创建一个名为Cat的类,其方法_init_()设置两个属性:Cat_name,Cat_age,为了赋予每只猫蹲下能力,创建一个名为sit()方法;赋予每只猫奔跑能力,另外创建一个名为run()方法;前后两者都打印出前述两项属性和目前的状态

class Cat:
    def __init__(self):
        self.Cat_name=input('请输入猫的名字:')
        self.Cat_age=input('请输入猫的年龄::')
   def sit(self):
        print(str(self.Cat_age)+'的'+self.Cat_name+'能蹲下')
   def run(self):
        print(str(self.Cat_age)+'的'+self.Cat_name+'能跑')


my_cat=Cat()
my_cat.sit()
my_cat.run()
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Python进阶知识
Python 定义类和属性
十七、Python __slots__:限制类实例动态添加属性和方法
Python 基础(十一):面向对象
python 复习-类与对象
Python-面向对象
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服