python中类的封装,继承和多态

封装
1.封装是面向对象编程的一大特点
2.面向对象编程的第一步 将属性和方法封装到一个抽象(因为类不能直接使用)的类中
3.外界使用类创建对象,然后让对象调用方法
4.对象方法的细节都被封装在类的内部

"""
需求
1.小明体重75.0公斤
2.小明每次跑步都会减肥0.5公斤
3.小明每次吃东西体重都会增加1公斤
需求
1.小明和小美都爱跑步
2.小美体重45.0公斤
2.每次跑步都会减肥0.5公斤
3.每次吃东西体重都会增加1公斤
"""
class Person:
    def __init__(self,name,weight):
        self.name = name
        self.weight = weight
	def __str__(self):
       	 return '我的名字叫 %s 体重是 %.2f' %(self.name,self.weight)
	def run(self):
        print('%s 去跑步~~~' %(self.name))
        self.weight -= 0.5
    def eat(self):
        print('%s 吃东西~~~' %(self.name))
        self.weight += 1
        
a = Person('小明',89)
a.run()
a.eat()
print(a)

#打印结果
小明 去跑步~~~
小明 吃东西~~~
我的名字叫 小明 体重是 89.50

继承:实现代码的重用 相同的代码不需要重复的写
继承具有传递性
当父类方法不能满足子类的需求的时候
可以对方法进行重写
1.覆盖父类的方法
2.对父类的方法进行扩展

class Animal:
    def eat(self):
        print('吃...')

    def drink(self):
        print('喝...')

    def run(self):
        print('跑...')

    def sleep(self):
        print('睡...')
        
class Cat(Animal):
    def haha(self):
        print('喵喵~~')

hellokitty=Cat()
hellokitty.run()
hellokitty.sleep()
hellokitty.eat()
hellokitty.haha()
#打印结果...
睡...
吃...
喵喵~~

重写

class Animal:
    def eat(self):
        print('吃...')
        
    def drink(self):
        print('喝...')
        
    def run(self):
        print('跑...') 
         
	def sleep(self):
        print('睡...') 

class Cat(Animal):
    def haha(self):
        print('喵喵~~')

class kitty(Cat):
    def speak(self):
        print('我可以说话')
    def haha(self):
        print('@#$%^&*()')    

jj=kitty()
jj.speak()
jj.sleep()
jj.haha()   


#打印结果
 我可以说话
睡...
@#$%^&*()

新式类,旧式类

"""
类的结构
术语--实例
1.使用面向对象开发,第一步是设计类
2.使用 类名() 创建对象,创建对象的动作有两步
	1.在内存中为对象分配空间
	2.调用初始化方法__init___ 为对象初始化
3.对象创建后,内存中就有了一个对象的实实在在的存在--实例
因此:
1.创建出来的对象叫做类的实例
2.创建对象的动作叫做实例化
3.对象的属性叫做实例属性
4.对象调用的方法叫做实例方法
在程序执行时:
1.对象各自拥有自己的实例属性
2.调用对象的方法,可以通过self
	访问自己的属性
	调用自己的方法
结论:
1.每一个对象都有自己独立的内存空间,保存各自不同的属性
2.多个对象的方法,在内存中之有一份,在调用方法时,
需要把对象的引用传递到方法内部
"""
"""
新式类和旧式(经典)类:
object是Python为所有对象提供的基类,提供有一些内置的属性和方法,
可以使用dir函数查看
新式类:以object为基类的类
经典类 不以object为基类的类

在python3.X中定义的类时,如果没有指定父类,会默认使用object作为基类--
python3.x中定义的类都是新式类
在python2.x中定义类时,如果没有指定父类,则不会以object作为基类
"""


多态(以封装和继承为前提)
不同的子类对象调用相同的方法 产生不同的结果

class Dog(object):
    def __init__(self,name):
        self.name = name
	def game(self):
        print('%s 开心的玩~' %(self.name))

class Person(object):
    def __init__(self,name):
        self.name = name	

	def game_with_dog(self,dog):
        print('%s和%s开心的玩' %(self.name,dog.name))
        dog.game()


 #创建一个狗对象
wangcai = Dog('大黄')

#创建一个人对象
xiaoming = Person('小明')
xiaoming.game_with_dog(wangcai)

#打印结果
小明和大黄开心的玩
大黄 开心的玩~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值