首页 > 其他 > 详细

10-多态-对象操作

时间:2021-01-12 16:36:51      阅读:28      评论:0      收藏:0      [点我收藏+]
# ban jia ju
class Home:
    def __init__(self, addr, area):
        self.ad = addr
        self.ar = area
        self.furniture = []
        self.rest_ar = area

    def __str__(self):
        return f房子地址是{self.ad};总面积是{self.ar};剩余空间是{self.rest_ar}\n家具有{self.furniture}

    def add_furniture(self, fur):
        if self.rest_ar >= fur.area:
            # 精髓就这点,是fur.name,还有后面的剩余面积需要改变。
            self.furniture.append(fur.name)
            self.rest_ar -= fur.area
        else:
            print(holy my shit!my house is not big enough!)


class Furniture:
    def __init__(self, name, area):
        self.name = name
        self.area = area


jia = Home(斐济, 1000)
a = Furniture(big bed, 10)
b = Furniture(big computer, 5)
c = Furniture(gymnasium, 2000)
d = Furniture(book shelf, 20)
jia.add_furniture(a)
jia.add_furniture(b)
jia.add_furniture(c)
jia.add_furniture(d)
print(jia)

# 出错点:1.写了一个home.add_furniture(a),虽然没报错但在这里不能这样写,若这样写,则self当做参数了,而且上面的self.area也显示报错,因为连锁反应,他没有area这个东西。用类对象.方法()这样写才对。
# 2.类名大写,误导了自己。
# 3.关于self能否直接.来调用,得看定义的初始化方法。__init__()和__str__一个可以直接在类里传参,一个默认调用print。get??!feel nice!
# # 问题:0:存储input过来信息的问题。1;列表双值调的问题,见微信代码!2.list覆盖的问题。
# class stu():
#     def __init__(self,name,age):
#         self.name=name
#         self.age=age
#     def __str__(self):
#         return f‘名字为{self.name}年龄为{self.age}‘
#
# stu_list=[]
# for i in range(1,3):
#     # stu_list.append(a.name)
#     name=input(‘please input your name:‘)
#     age=int(input(‘please input your age:‘))
#     if age >= 18:
#         a=stu(name, age)
#         stu_list.append(a)
# print(a)

class Stu:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return f名字为{self.name}年龄为{self.age}


list1 = []
for _ in range(1, 3):
    name = input(please input your name:)
    age = int(input(please input your age:))
    s1 = Stu(name, age)  # s1类型是是__main__.stu,不是它返回的字符串,打印s1才会返回字符串# 。若是指定了方法调,则返回具体数据类型。注意s1具有两个属性,区分它的返回值、
    list1.append(s1)  # list1类型是__main__.stu,更不是子对象返回的字符串。打印list1出现地址。这个有点nb,可以多层嵌套。
list2 = []
for i in list1:
    if i.age > 18:  # 在这里体现出来了。i是一堆对象,指向stu的对象。
        list2.append(i)
        print(i)  # 打印这个对象,就是不断执行Stu

 

# 最后那个传参没写出来,窒息的声音。
class GameCharaters():
    def show_big(self,a,b,c):
        print(f昵称:{self.a}\t攻击力:{self.b}\t生命值:{self.c})
    def player_data(self):
        list_name=[]
        list_aggressivity=[]
        list_hit_point=[]
        for i in range (3):
            game_character=input(请输入游戏玩家的昵称、攻击力、生命值:)
            name,aggressivity,hit_point=game_character.split(,)
            list_name.append(name)
            list_aggressivity.append(aggressivity)
            list_hit_point.append(hit_point)
        index_a=list_aggressivity.index(max(list_aggressivity))
        bigest_aggressivity=max(list_aggressivity)
        bigest_name=list_name[index_a]
        bigest_hit=list_hit_point[index_a]
        return bigest_name,bigest_aggressivity,bigest_hit


a=GameCharaters()
data=a.player_data()
print(data)

 

10-多态-对象操作

原文:https://www.cnblogs.com/teark/p/14265411.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!