1.类与对象的概述python
2.封装算法
3.继承app
4.多态函数
5.类的成员spa
6.类与类之间的关系设计
7.私有对象
类是对一系列具备相同属性的事物的抽象,相同于设计图纸,而对象则是某个具体的事物,二者之间的关系对象是基于类来实现的。类是对对象的描述,类里面通常包含属性和方法,而属性的设置通常经过__init__()构造 函数来实现,其余的函数在类里面称为方法,由于比普通函数都了一个self。blog
类是负责描述对象的 -> 类型
定义属性和方法
对象是经过类来建立的具体的个体. 每一个对象都有本身的独立的名称空间
执行动做的时候最好是使用对象去执行.
self : 当前正在执行方法的对象
实例1:建立类和对象继承
class Person:
def __init__(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender
def talk(self):
print("we can speak Chinese")
def sleep(self):
print("the studies show us, adult people should sleep at least 7 hours everyday")
p = Person("Ivy","24","female")
p.talk()
原理分析:建立类的时候会自动在内存里面生成一个类名称空间,当实例化一个对象的时候有会生成另外一个名称空间,对象会直接把类下面init里面的属性copy到本身的名称空间里,
而后须要使用类方法的时候,对象会直接找类里面的方法。
实例2:给类里面的方法传参ip
例子3:写开演唱会
class Singer:
def __init__(self,name,salary,gender,songs = []):
self.name = name
self.salary = salary
self.gendeer = gender
self.songs = songs
def song_list(self,songs_lst):
for s in songs_lst:
self.songs.append(s)
def sing(self,song):
print(f'{self.name} is singing {song}')
def live(self):
for item in self.songs:
print(f'{self.name} is singing {item}')
songs_list = ["寓言","阿刁","花房姑娘"]
singer = Singer("Angela","100000","female",songs_list)
singer.sing("淋雨一直走")
singer.live()
例子4 银行存取钱
class Account:
def __init__(self,card,password,money=10):
self.card = card
self.pwd = password
self.money = money
def saving(self):
if self.card == "100000" and self.pwd == "123456":
saving_number = int(input("Please input money number that you want to saving: ").strip())
self.money += saving_number
else:
print("card number or password is wrong")
def take_money(self):
if self.card == "100000" and self.pwd == "123456":
taking_money = int(input("please input the money number which you plan to take out: "))
if taking_money <= self.money:
print(f"you can take money {taking_money}")
self.money -= taking_money
else:
print('sorry,Insufficient balance')
else:
print("card number or password is wrong")
def banlance(self):
print(f'your current balance is {self.money}')
p = Account("100000","123456")
p.banlance()
p.saving()
p.take_money()
p.banlance()
例子5 对一组模板的定义
class Msg:
def email(self):
print("send message through email")
def chat(self):
pass
def wechat(self):
print("send message through wechat")
def app(self):
print("send message through app")
def important(self):
self.email()
self.wechat()
self.app()
msg = Msg()
msg.important()
属性的封装:把多个变量封装到一个对象中
方法的封装:把多个方法封装到一个对象中
子类能够自动拥有父类的功能除了私有的之外
单继承:
class NiuMaoWang:
def fly(self):
print("flying")
class HongHaiEr(NiuMaoWang):
pass
honghaier = HongHaiEr()
honghaier.fly()
多继承:
class NiuMaoWang:
def fly(self):
print("flying")
class TieSan:
def PutOffFire(self):
print("put out fire")
class HongHaiEr(NiuMaoWang,TieSan):
pass
honghaier = HongHaiEr()
honghaier.fly()
honghaier.PutOffFire()
ps: 一个子类能够拥有多个父类。若是继承了多个父类,会有优先查找最近的那个一。父类也称为基类和超类,子类也称为派生类(python3 里面的继承都是广度优先,
python2里面默认是深度优先,采用C3算法)
同一个对象,多重形态
def duck(duckk):
duckk.bulk()
class Monkey:
def __self__(self):
pass
def bulk(self):
print("bulking")
monkey = Monkey()
monkey.bulk()
duck(monkey)
待补充
1.变量 分为类变量和实例变量
实例变量:对象.方法 调用。
类变量: 直接定义在类里面,对全部对象开放,特色节约内存,经过类直接调用。(也可使用实例来调用but不推荐)
2.方法
2.1.实例方法:对象.方法
2.2.类方法:类名.方法
第一个参数要求传过来一个类
类方法上面必须加一个@classmethod
2.3.静态方法:类名.方法 也能够是对象.方法
类方法上面必须加@staticmethod装饰器,至关于在类的名称空间定义了一个普通函数,主要是作分类用。
3.属性
把一个方法装饰成一个函数来使用 在类方法上方加@propeerty,主要使用的场景作某些函数会随着时间的推移而变化,例如:年龄或者分页。
1.依赖关系
两个事物之间联系不紧密,我须要你可是你不属于我,类与类之间最松散的一种关系。在执行某个方法的时候把另一个类的对象传递进来
class Person:
def __init__(self,name,gender):
self.name = name
self.gender = gender
def play_game(self,tools): ps:经过传递参数产生联系
tools.wzry()
class Phone:
def __init__(self,brand,price):
self.brand = brand
self.price = price
def wzry(self):
print(f'{self.brand} is running 王者荣耀')
phone = Phone("米6","2300")
person = Person("Ivy","female")
person.play_game(phone)
2.关联关系(我须要你,你也属于我),组合关系,聚合关系
2.1.关联关系: 两种事物必须是互相关联的. 可是在某些特殊状况下是能够更更改和更更换的.
2.2. 聚合关系. 属于关联关系中的⼀一种特例例. 侧重点是xxx和xxx聚合成xxx. 各⾃自有各⾃自的 声明周期. 好比电脑. 电脑⾥里里有CPU, 硬盘, 内存等等. 电脑挂了了. CPU仍是好的. 仍是 完整的个体
2.3. 组合关系. 属于关联关系中的⼀一种特例例. 写法上差很少. 组合关系比聚合还要紧密. 比 如⼈人的⼤大脑, ⼼心脏, 各个器官. 这些器官组合成⼀一个⼈人. 这时. ⼈人若是挂了了. 其余的东⻄西 也跟着挂了了.
例1:关联一对一
class Boy:
def __init__(self,name,gender,GirlFriend = None):
self.name = name
self.age = gender
self.GirlFriend = GirlFriend
def hava_a_dinner(self):
if self.GirlFriend:
print(f'{self.name} hava a dinner with {self.GirlFriend.name}')
else:
print("single dog, you have no right for dinner")
class Girl:
def __init__(self,name,gender):
self.name = name
self.gender = gender
def makeup(self):
print(f'{self.name} has a big advantege is makeup herself like 20 years old')
girl = Girl("如花","female")
boy = Boy("Jack","male",girl)
boy.hava_a_dinner()
boy.GirlFriend = None
boy.hava_a_dinner()
例2:关联一对多
class Teacher:
def __init__(self,name,student_list = []):
self.name = name
self.student_list = student_list
def teach(self):
print(f'{self.name} is teaching')
for student in self.student_list:
student.study()
class Student:
def __init__(self,name):
self.name = name
def study(self):
print(f'{self.name} is studying')
s1 = Student("Ivy")
s2 = Student("Zoe")
s3 = Student("Yvette")
lst = [s1,s2,s3]
t = Teacher("Tony",lst).teach()
s1.study()
3.继承关系,实现关系
双下划线开头的是私有的内容