你以为的面向对象:就是你一遍看着你对象,一遍敲代码。
真的面向对象:定义一个模型或者说一类人。假设是机器人女友。
首先:
第一步:你可以先定义一个模型。基础的机器人,类人型的都有四肢五脏六腑。
然后填入功能:第一代女友:只会洗衣服做饭。是不是太无聊了。
升级下继承上一代的功能:第二代:除了洗衣做饭还能扯淡打游戏。
然后呢你朋友感觉你机器人女友不错哦。你不可能把你辛辛苦苦的升级版女朋友给他吧?
你就把你定义的机器人模型给了他。他可以自己为所欲为的定义功能想创造多少个真的都行【把模型实例化】。
解释两个概念:
类和对象:
对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念——类
类就相当于制造机器人女友的时候图纸,用它来进行创建的真正的女朋友就相当于对象。【够直白了吧】
认真了哈。
1,类的构成:
类(Class) 由3个部分构成
- 类的名称:类名
- 类的属性:一组数据
- 类的方法:允许对进行操作的方法 (行为)
<1> 举例:
1)人类设计,只关心3样东西:
- 事物名称(类名):人(Person)
- 属性:身高(height)、年龄(age)
- 方法(行为/功能):跑(run)、打架(fight)
2)狗类的设计
- 类名:狗(Dog)
- 属性:品种 、毛色、性别、名字、 腿儿的数量
- 方法(行为/功能):叫 、跑、咬人、吃、摇尾巴
2,定义类:机器人女朋友
class GirlFriend():
#方法函数
def wash(self):
print("我在洗衣服。")
def cook(self):
print("做饭中")
- 定义类时有2种:新式类和经典类,上面的Car为经典类,如果是GirlFriend(object)则为新式类
- 类名 的命名规则按照"大驼峰"
3,有了类了现在是不是开始让她成真了。
实例化方法:
对象名 = 类名()
first =GirlFriend()
上面就创造了第一代女朋友。
让她洗衣服:first.wash()。使用" . "点调用方法。
给她添加身高和体重的属性:
第一种:
first.weight="50kg"
first.height ="170cm"
第二种:使用__init__方法:【推荐】
初始化类:默认执行,自动调用。
def 类名:
#初始化函数,用来完成一些默认的设定
def __init__(self):
pass
__init__()
方法,在创建一个对象时默认被调用,不需要手动调用__init__(self)
中,默认有1个参数名字为self,如果在创建对象时传递了2个实参,那么__init__(self)
中出了self作为第一个形参外还需要2个形参,例如__init__(self,x,y)
__init__(self)
中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递进去
魔法方法:__str()__打印方法
def __str__(self):
msg = "嘿。。。我的颜色是" + self.color + "我有" + int(self.wheelNum) + "个轮胎..."
return msg
- 在python中方法名如果是
__xxxx__()
的,那么就有特殊的功能,因此叫做“魔法”方法 - 当使用print输出对象的时候,只要自己定义了
__str__(self)
方法,那么就会打印从在这个方法中return的数据
__del__对象被删除方法:
def __del__(self):
print("__del__方法被调用")
print("%s对象马上被干掉了..."%self.__name)
修改对象的数据:
第一种就是刚刚给体重和身高的时候操作一样。用对象名,赋值。
第二种在类中定义修改数据的方法,通过外界调用这个类的方法修改。【推荐】
对象的继承功能。刚刚讲了,第二代可以继承第一代的功能,而且还有额外的功能。定义第二个的时候吧要继承的那个写在类对象名称后面的括号里即可,可以理解为把要继承的吃掉了【下一代吧上一代干掉了,子类继承了父类】。继承后父类的方法和属性都会在子类中。
#第一代的
class GirlFriend(object):
#方法函数
def wash(self):
print("我在洗衣服。")
def cook(self):
print("做饭中")
#第二代的
class ErFriend(GirlFriend):
#方法函数
def cedan(self):
print("扯淡。")
def game(self):
print("游戏")
写得有点乱