1.创建对象
创建对象demo:
class Hero(object): # 新式类定义形式
"""info 是一个实例方法,类对象可以调用实例方法,实例方法的第一个参数一定是self"""
def info(self):
"""当对象调用实例方法时,Python会自动将对象本身的引用做为参数,
传递到实例方法的第一个参数self里"""
print(self)
print("self各不同,对象是出处。")
# Hero这个类 实例化了一个对象 taidamier(泰达米尔)
taidamier = Hero()
# 对象调用实例方法info(),执行info()里的代码
# . 表示选择属性或者方法
taidamier.info()
print(taidamier) # 打印对象,则默认打印对象在内存的地址,结果等同于info里的print(self)
print(id(taidamier)) # id(taidamier) 则是内存地址的十进制形式表示
2.添加和获取对象的属性
在方法内通过self获取对象属性
3.魔法方法__init__
•
问题:
•
创建对象后再去添加属性有点不合适,有没有简单的办法,可以在创建对象的时候,就已经拥有这些属性?
•
答案:
•
__init__
方法可以实现
•
•
说明:
•
# Python 的类里提供的,
两个下划线开始,两个下划线结束
的方法,就是
魔法方法
,__init__()就是一个魔法方法,通常用来做
属性初始化 或 赋值
操作(作用)。
•
#
如果类面没有写__init__方法,Python会自动创建
,但是不执行任何操作,
•
# 如果为了能够在完成自己想要的功能,
可以自己定义__init__
方法,
•
# 所以
一个类里无论自己是否编写__init__方法 一定有__init__方法
。
__init__()方法
•
说明:
•
__init__()方法,在创建一个对象时
默认被调用
,不需要手动调用
•
__init__(self)中的self参数,不需要开发者传递,python解释器会自动把当前的对象
引用
传递过去。
•
•
问题:
•
在类的方法里定义属性的固定值,则每个对象实例变量的属性值都是相同的。
•
•
一个游戏里往往有很多不同的英雄,能否让实例化的每个对象,都
有相同
的属性值呢?
有参数的__init__(self)方法
•
说明
:
•
通过一个类,可以创建多个对象,就好比 通过一个模具创建多个实体一样
•
•
__init__(self)中,
默认有1个参数名字为self
,如果在创建对象时传递了2个实参,那么__init__(self)中出了self作为第一个形参外还需要2个形参,例如
__init__(self,x,y)
•
•
注意
:
•
1).
在类内部获取 属性 和 实例方法,通过self获取;
•
2).
在类外部获取 属性 和 实例方法,通过对象名获取。
•
3).
如果一个类有多个对象,每个对象的属性是各自保存的,
都有各自独立的地址
;
•
4).
但是实例方法是所有对象共享的,只占用一份内存空间。
类会通过self来判断是哪个对象调用了实例方法。
魔法方法:__str__()方法
魔法方法:__str__()方法
n
说明
:
n
在python中方法名如果是__xxxx__()的,那么就有特殊的功能,因此叫做“魔法”方法
n
当使用print输出对象的时候,默认打印对象的内存地址
。
如果类定义了__str__(self)
方法,那么就会打印从在这个方法中
return 的数据
n
__str__方法通常
返回
一个字符串,作为这个
对象
的描述信息
魔法方法:__doc__()方法
•
# 查看
类的文档说明
,也就是
类的注释
•
# print(
Hero.__doc__
)
魔法方法:__del__()方法
继承介绍以及单继承
单继承
单继承
:子类只继承一个父类
很久很久以前(
long long ago:
)曾经有这样一个
故事
:
情节
:煎饼果子老师傅在煎饼果子界摸爬滚打几十年,拥有一身精湛的煎饼果子技术,并总结了一套"古法煎饼果子配方"。可是老师傅年迈已久,在嗝屁之前希望把自己的配方传承下去,于是老师傅把配方传给他的徒弟大猫...
多继承
子类重写父类的同名属性和方法
•
核心点:
•
无论何时何地,self都表示是子类的对象。在调用父类方法时,通过传递self参数,来控制方法和属性的访问修改。
•
剧情发展
:
•
大猫的煎饼果子店非常红火,终于有一天,他成了世界首富!!
•
但是他也老了,所以他希望把 师傅的配方 和 学校的配方 以及自己的配方 继续传承下去...(多层继承)
多层继承
class Animal(object):
def play(self):
print("动物都有各自的玩法")
class Cat(Animal):
# 方法的重写/覆盖
def play(self):
super().play()
print("猫喜欢玩球")
c = Cat()
c.play()