封装
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)
#打印结果
小明和大黄开心的玩
大黄 开心的玩~