12-面向对象 homework

1.声明一个电脑类:

属性: 品牌、颜色、内存大小
方法: 打游戏、写代码、看视频
a.创建电脑类的对象,然后通过对象点的方式获取、修改、添加和删除它的属性
b.通过attr相关方法去获取、修改、添加和删除它的属性

""" 易竹小居士 """

"""
1.声明一个电脑类:  
属性:品牌、颜色、内存大小  
方法:打游戏、写代码、看视频  

a.创建电脑类的对象,然后通过对象点的方式获取、修改、添加和删除它的属性  
b.通过attr相关方法去获取、修改、添加和删除它的属性   

"""

class Computer:
    """声明一个电脑类"""
    def __init__(self, brand='', color='black', ram=0):
        self.brand = brand
        self.color = color
        self.ram = ram

    def play_game(self):
        print('打游戏')

    def write_code(self):
        print('写代码')

    def watch_tv(self):
        print('看电视')




if __name__ == '__main__':
    cp1 = Computer('lenovo', 'yellow', 4)
    """创建一个电脑对象"""
    print(cp1)

    # 获取
    print(cp1.color)
    print(cp1.brand)
    print(cp1.ram)

    # 修改
    cp1.color = 'red'
    print(cp1.color)

    cp1.brand = 'mac'
    print(cp1.brand)

    cp1.ram = 2
    print(cp1.ram)


    # 添加
    cp1.listen = 'music'
    print(cp1.listen)

    # 删除
    del cp1.ram
    #print(cp1.ram)  # 在打印就报错:AttributeError: 'Computer' object has no attribute 'ram'



    # 通过attr获取
    print(cp1.__getattribute__('color'))
    print(getattr(cp1, 'brand', '电脑品牌'))

    # 通过attr增加
    cp1.__setattr__('outline', 'rectangle')
    print(cp1.outline)  #得到rectangle
    setattr(cp1, 'outline', 'rectangle')
    print(cp1.outline)


    #通过attr改
    setattr(cp1, 'color', 'pink')
    print(cp1.color)   #得到pink

    cp1.__setattr__('brand', 'hp')
    print(cp1.brand)   #得到hp

    #通过attr删除
    delattr(cp1, 'color')
    print(cp1.color)  #得到:AttributeError: 'Computer' object has no attribute 'color'

    cp1.__delattr__('color')
    print(cp1.color)   #得到:AttributeError: 'Computer' object has no attribute 'color'




后补:

""" 易竹小居士 """
"""
1.声明一个电脑类:
属性:品牌、颜色、内存大小
方法:打游戏、写代码、看视频
"""
class Computer:
    """电脑类"""
    def __init__(self, brand='', color='black', memory=0):
        self.brand = brand
        self.color = color
        self.memory = memory

    @staticmethod
    def play_game(game):
        print('打%s游戏' % game)

    @staticmethod
    def coding(code_type):
        print('写%s程序' % code_type)

    @staticmethod
    def watch_video(video):
        print('在看%s' % video)

"""
2.声明一个人的类和狗的类:
狗的属性:名字、颜色、年龄 狗的方法:叫唤
人的属性:名字、年龄、狗 人的方法:遛狗
a.创建人的对象小明,让他拥有一条狗大黄,然后让小明去遛大黄
"""
class Dog:
    """狗类"""
    def __init__(self, name='', color='', age=0):
        self.name = name
        self.color = color
        self.age = age

    def shout(self):
        print('%s:汪汪汪!!' % self.name)


class Person:
    """人类"""
    def __init__(self, name='', age=0):
        self.name = name
        self.age = age
        # None来表示对象的零值
        self.dog = None

    def walk_dog(self):
        """遛狗"""
        if self.dog == None:
            print('没🐶,遛自己吧!')
            return

        print('%s牵着%s在散步' % (self.name, self.dog.name))

"""
3.声明一个矩形类:
属性:长、宽 方法:计算周长和面积
a.创建不同的矩形,并且打印其周长和面积
"""
class Rectangle:
    """矩形类"""
    def __init__(self, length, width):
        self.length = length
        self.width = width

    def perimeter(self):
        """求周长"""
        return (self.length + self.width)*2

    def area(self):
        """求面积"""
        return self.length * self.width


"""
4.创建一个学生类:
属性:姓名,年龄,学号 方法:答到,展示学生信息 
创建一个班级类:
属性:学生,班级名 方法:添加学生,删除学生,点名
"""
from random import randint

class Student:
    """学生类"""
    def __init__(self, name='', age=0):
        self.name = name
        self.age = age
        self.study_id = 'py1805'+str(randint(0, 50))

    def answer(self):
        print('%s,到!' % self.name)

    def show(self):
        print('姓名:%s 年龄:%d 学号:%s' % (self.name, self.age, self.study_id))


class Class:
    """班级类"""
    def __init__(self, name=''):
        self.name = name
        self.students = []

    def append_student(self, student=None):
        """添加学生"""
        self.students.append(student)

    def del_student(self, name):
        """删除学生"""
        for student in self.students[:]:
            if student.name == name:
                self.students.remove(student)

    def call_names(self):
        """点名"""
        for student in self.students:
            # 点名
            print(student.name)
            # 答到
            student.answer()


"""
5.写一个类,封装所有和数学运算相关的功能(包含常用功能和常用值,例如:pi,e等)
"""
class Math:
    """数学类"""
    pi = 3.1415926
    e = 2.718

    @staticmethod
    def sum(*number):
        """求和"""
        sum1 = 0
        for x in number:
            sum1 += x
        return sum1

    @classmethod
    def cricle_area(cls, radius):
        """求圆的面积"""
        return radius**2*cls.pi



if __name__ == '__main__':
    """第一题"""
    cm = Computer()
    cm.memory = 512
    cm.brand = '惠普'
    Computer.play_game('贪吃蛇')
    # 添加属性
    # cm.price = 998
    setattr(cm, 'price', 998)
    print(cm.price)

    # 删除属性
    # del cm.color
    cm.__delattr__('price')

    # 修改属性
    # cm.memory = 258
    cm.__setattr__('memory', 1024)

    """第二题"""
    p1 = Person('小明', 18)
    p1.dog = Dog('大黄', 'yellow', 3)
    p1.walk_dog()

    """第三题"""
    rect1 = Rectangle(10, 20)
    print(rect1.area(), rect1.perimeter())

    rect2 = Rectangle(100, 30)
    print(rect2.perimeter())

    """第四题"""
    stu1 = Student('张三', 20)
    stu2 = Student('aa', 18)
    stu3 = Student('bb', 30)

    class1 = Class('py1805')
    class1.append_student(stu1)
    class1.append_student(stu2)
    class1.append_student(stu3)
    class1.call_names()


    # 注意:如果函数的参数是对象(列表、字典、类的对象),传参的时候传的是地址,如果函数中需要对象的内容进行修改,
    #      传参的时候传对象的拷贝(如果是列表可以切片)
    def func1(list1):
        list1.append(10)
        print(list1)

    def func2(lista):
        lista.append(20)
        print(lista)

    list11 = [1, 2, 3, 4]
    func1(list11[:])
    func2(list11[:])
    print(list11)

    print(Math.sum(10, 2, 3))
    print(Math.cricle_area(3))
    print(Math.pi)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,863评论 6 13
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,084评论 1 32
  • 记忆中从青春期开始,我的背就不是挺拨的,经常有熟悉的亲戚朋友走过路过不忘敲打我一下,提醒我直起来,可是无论我怎么提...
    xiaoyuxilili阅读 605评论 1 2
  • 人类是群居动物吗,如果一个人生活又会怎样。在工作中总会有我对人际关系产生厌恶,只想工作,下班,回家,什么人都不想接...
    summer夏天来了阅读 198评论 0 0
  • 不要纠结别人怎么对待自己。关键是自己是否真诚地对待别人。 每次接识不同的人,唯恐自己被别人误认为骗子。 所以,用最...
    石三英语阅读 146评论 0 0