python(組件,封裝,繼承,多態)

前言

組件

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()

後記

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章