前言
组件
import itchat
import time
import random
itchat.auto_login()
# while True:
# itchat.send('hello westos',toUserName='filehelper')
# time.sleep(random.randint(1,3))
friends = itchat.get_friends()
# print(friends)
info = {}
for friend in friends[1:]:
if friend['Sex'] == 1:
info['male'] = info.get('male',0) + 1
elif friend['Sex'] == 2:
info['female'] = info.get('female',0) + 1
else:
info['other'] = info.get('other',0) + 1
print(info)
封装
object1
oop = object oriented programming
类: 是一群具有相同特征或行为的事物的统称,类是抽象的,不能直接
使用
对象: 由类创造出来的具体存在
类: 属性(信息)和方法(你能完成的事情)
1.如何定义类?class 类(): pass
2.如何将类转化为对象?实例化
实例化指在面向对象编程中,使用类创建对象的过程称为实例化,是将
一个抽象的概念具体化的过程
实例化过程中一般由类名 对象名 = 类名(参数1,参数2,…)
需求:
小明今年18岁,身高1.75,每天早上要跑步,跑完去吃饭
小美今年16岁,身高1.65,小美不跑步,喜欢吃东西
class People():
#shuxing
name = 'laoli'
age = 40
#fangfa
def eat(self):
print('eat...')
def sleep(self):
print('sleepping...')
p1 = People()
p2 = People()
print(p1.name)
print(p2.name)
print(p1.age)
print(p2.age)
p1.eat()
p2.eat()
object2
class People():
def __init__(self):
print('self',self)
p1 = People()
print('p1',p1)
object3
class People():
def __init__(self,name,age):
self.name = name
self.age = age
def __str__(self):
return 'I am %s' %self.name
def run(self):
print('%s is running...' %self.name)
p1 = People('laoli',40)
print('p1:',p1.name)
p1.run()
print(p1)
p2 = People('laowang',18)
print('p2:',p2.name)
p2.run()
print(p2)
面向对象练习1
需求
1.小明体重75.0公斤
2.小明每次跑步会减肥0.5公斤
3.小明每次吃东西体重会增加1公斤
需求
1.小明和小美都爱跑步
2.小美体重45.0公斤
3.小明体重75.0公斤
4.每次跑步都会减少0.5公斤
5.每次吃东西都会增加1公斤
class People():
def __init__(self,name,weight):
self.name = name
self.weight = weight
def __str__(self):
return 'My name is %s, weight is %.2f' %(self.name,self.weight)
def run(self):
print('%s is running...' %self.name)
self.weight -= 0.5
def eat(self):
print('%s is eating...' %self.name)
self.weight += 1
xiaoming = People('xiaoming',75.0)
xiaoming.run()
print(xiaoming)
xiaomei = People('xiaomei',45.0)
xiaomei.eat()
print(xiaomei)
面向对象 栈
class Stack(object):
def __init__(self):
self.stack = []
def __len__(self):
return len(self.stack)
def top(self):
if not self.is_empty():
return self.stack[-1]
raise Exception('Stack is empty!')
def push(self,element):
self.stack.append(element)
def pop(self):
if self.is_empty():
raise Exception('Stack is empty!')
else:
item = self.stack.pop()
return item
def length(self):
return len(self.stack)
def is_empty(self):
return len(self.stack) == 0
stack = Stack()
stack.push(1)
stack.push(2)
# print(stack.length())
item = stack.pop()
print('The pop item is: %s' %item)
print(stack.top())
print(stack.is_empty())
stack.pop()
print(stack.is_empty())
stack.pop()
面向对象 队列
队列是限制在一端进行插入操作和另一端进行删除操作的线性表
特点:先进先出(FIFO)
面向对象 练习2
需求:
1.房子有户型,总面积和家具名称列表
新房子没有任何的家具
2.家具有名字和占地面积,其中
床:占4平米
衣柜:占2平米
餐桌:占1.5平米
3.将以上三件家具添加到房子中
4.打印房子时,要求输出:户型,总面积,剩余面积,家具名称列表
class Furniture(object):
def __init__(self,name,area):
self.name = name
self.area = area
def __str__(self):
return '[%s] 占地 %.2f 平米' %(self.name,self.area)
# bed = Furniture('bed',4)
# print(bed)
class House(object):
def __init__(self,type,area):
self.type = type
self.area = area
self.free_area = area
self.fur_list = []
def __str__(self):
return ('户型: %s\n总面积: %.2f\n剩余面积: %.2f\n家具: %s'
%(self.type,self.area,self.free_area,self.fur_list))
def add_fur(self,item):
self.fur_list.append(item.name)
self.free_area -= item.area
bed = Furniture('bed',4)
yigui = Furniture('yigui',2)
table = Furniture('table',1.5)
home = House('villa',200)
home.add_fur(bed)
home.add_fur(yigui)
print(home)
面向对象练习
1.士兵瑞恩有一把AK47
2.士兵可以开火(士兵开火扣动的是扳机)
3.枪 能够 发射子弹(把子弹发射出去)
4.枪 能够 装填子弹 --增加子弹的数量
Soldier Gun
name model
gun bullet_count #子弹数量足够多才能完成射>击的动作
init(self): init(self):
fire(self): add_bullet(self,count):#装填子弹的方法
shoot(self):
继承
继承描述的是事物之间的所属关系,定义一个类时,可以从某哪个现有的类继承
新的类称为子类,扩展类(subclass),被继承的类称为基类、父类
或超类(Baseclass、Superclass)
class Father(object):
def __init__(self,name,age):
self.name = name
self.age = age
def eat(self):
print('%s is eating...' %self.name)
def set_goal(self):
print('%s set a goal' %self.name)
class Son(Father):
def eat(self):
# super(Son,self).eat()
Father.eat(self)
print('%s daoli eating...' %self.name)
father = Father('laolaoli',65)
son = Son('laoli',40)
# print(son.name)
# son.set_goal()
son.eat()
继承2
class D():
def test(self):
print('test in D...')
class C(D):
def test(self):
print('test in C...')
class B(D):
pass
#def test(self):
# print('test in B...')
class A(B,C):
pass
# def test(self):
# print('test in A...')
a = A()
a.test()
私有方法
1
class Student(object):
def __init__(self,name,age):
self.name = name
self.__age = age
def __get_info(self):
print('%s is %s years old' %(self.name,self.__age))
student1 = Student('xiaoming',10)
print(student1.name)
# print(student1.__age)
# student1.__get_info()
#__age - > _Student__age
# print(student1._Student__age)
# student1._Student__get_info()
2
class Student(object):
def __init__(self,name,age):
self.name = name
self.__age = age
def __get_info(self):
print('%s is %s years old' %(self.name,self.__age))
def get_age(self):
print(self.__age)
def set_age(self,age):
if 0 < age < 100:
self.__age = age
print('success!')
else:
raise Exception('Error!')
student = Student('xiaoming',10)
# student.__age = 100
# print(student.__age)
# student.__get_info()
student.set_age(80)
多态
class Student():
def get_score(self):
print('Student score...')
class Chinese():
def get_score(self):
print('Chinese score...')
class Math():
def get_score(self):
print('Math score...')
student1 = Student()
student2 = Chinese()
student3 = Math()
student1.get_score()
student2.get_score()
student3.get_score()