Cosplay肉:如何传递我的肉 米饭和豆类的价值 从我的玉米煎饼类到肉类类 大米类和豆类类分别

关于Cosplay肉的问题,在burrito define中经常遇到, 我有四个类,我试图将我的肉值,米值和豆值传递给它们各自的类,并通过Burrito类返回它们的值。我已经为此奋斗了两天,但没有明显的进展,任何关于该怎么做的想法,对于任何语法错误表示歉意。

我有四个类,我试图将我的肉值,米值和豆值传递给它们各自的类,并通过Burrito类返回它们的值。我已经为此奋斗了两天,但没有明显的进展,任何关于该怎么做的想法,对于任何语法错误表示歉意。

class Meat:
    def __init__(self, value=False):
        self.set_value(value)
    def get_value(self):
        return self.value
    def set_value(self, value):
        if value in ["chicken", "pork", "steak", "tofu"]:
            self.value = value
        else:
            self.value = False
class Rice:
    def __init__(self, value=False):
        self.set_value(value)
    def get_value(self):
        return self.value
    def set_value(self, value):
        if value in ["brown", "white"]:
            self.value = value
        else:
            self.value = False
class Beans:
    def __init__(self, value=False):
        self.set_value(value)
    def get_value(self):
        return self.value
    def set_value(self, value):
        if value in ["black", "pinto"]:
            self.value = value
        else:
            self.value = False

这里是类是我假设传入值从和返回值。

class Burrito:
    def __init__ (self, meat, to_go, rice, beans):
        self.meat = Meat(meat)
        self.set_to_go(to_go)
        self.rice = Rice(rice)
        self.beans = Beans(beans)
    def set_meat(self, meat):
        self.set_value(meat)
    def set_to_go(self, to_go):
        to_go_list = [True, False]
        if to_go in to_go_list:
            self.to_go = to_go
        else:
            self.to_go = False
    def set_rice(self, rice):
        self.set_value(rice)
    def set_beans(self, beans):
        self.set_value(beans)
    def get_meat(self):
        self.meat_v = Meat()
        return self.meat_v.value
    def get_to_go(self):
        return self.to_go
    def get_rice(self):
        self.rice_v = Rice()
        return self.rice_v.value
    def get_beans(self):
        self.beans_v = Beans()
        return self.beans_v.value

这里是我用来测试我的代码的行:

newburrito = Burrito("pork", True, "brown", "pinto")
print (newburrito.meat)

这是错误线我得到:

<__main__.Meat object at 0x7fa5ad8bccf8>

我期待它打印

pork
1

首先,你没有得到一个错误。你在对象肉上调用 print,这就是发生的事情,print 显示对象是类Meat,它还显示了这个实例在内存中的地址。

如果要打印存储在Meat类实例中的属性value上的值,则必须执行print(newburrito.meat.get_value()),因为它已经在注释中指出。

0

本练习是关于 Python 属性的。如果您期望newburrito.meat返回"pork",这意味着meat是类Burrito属性,不是方法,也不是类实例,这是您的代码定义它的方式。

步骤 1。使类成员meatto gobeansrice私有。约定是以下划线开头的名称:

class Burrito:
    def __init__ (self, meat, to_go, rice, beans):
        self._meat = Meat(meat)
        self._to_go = to_go
        self._rice = Rice(rice)
        self._beans = Beans(beans)

步骤 2:定义属性以返回。为此,您需要一个 getter 方法(使用 decorator@property)和一个 setter 方法(使用 decorator@xx.setter获取2.

class Burrito:
    # ... continued ...
    @property
    def meat(self):
        return self._meat.get_value()
    @meat.setter
    def meat(self,value):
        self._meat.set_value(value)
    @property
    def to_go(self):
        return self._to_go
    @to_go.setter
    def to_go(self,value):
        self._to_go  = isinstance(value,bool) and value
    @property
    def rice(self):
        return self._rice.get_value()
    @rice.setter
    def rice(self,value):
        self._rice.set_value(value)
    @property
    def beans(self):
        return self._beans.get_value()
    @beans.setter
    def beans(self, value):
        self._beans.set_value(value)

然后,您可以使用属性.meat.rice等,就好像它们是Burrito的实例变量一样,但是当您将它们用作 r 值时,解释器调用 getter 方法,当您将它们用作 l 值时,解释器调用 setter 方法。

你可以看到它是如何工作的:

newburrito = Burrito("pork", True, "brown", "pinto")
print (newburrito.meat)
print (newburrito.rice)
print (newburrito.beans)
print (newburrito.to_go)
newburrito.meat = 'tofu'
print (newburrito.meat)

输出为

pork
brown
pinto
True
tofu
0

感谢大家的努力,我感谢我从你的代码中得到的所有指针。

class Meat:
    def __init__(self, value=False):
        self.set_value(value)
    def get_value(self):
        return self.value
    def set_value(self, value):
        if value in ["chicken", "pork", "steak", "tofu"]:
            self.value = value
        else:
            self.value = False
class Rice:
    def __init__(self, value=False):
        self.set_value(value)
    def get_value(self):
        return self.value
    def set_value(self, value):
        if value in ["brown", "white"]:
            self.value = value
        else:
            self.value = False
class Beans:
    def __init__(self, value=False):
        self.set_value(value)
    def get_value(self):
        return self.value
    def set_value(self, value):
        if value in ["black", "pinto"]:
            self.value = value
        else:
            self.value = False

我的工作卷饼类:

class Burrito:
    def __init__ (self, meat, to_go, rice, beans, extra_meat = False, guacamole = False, cheese = False, pico = False, corn = False):
        self.meat = Meat(meat)
        self.set_to_go(to_go)
        self.rice = Rice(rice)
        self.beans = Beans(beans)
        self.set_extra_meat(extra_meat)
        self.set_guacamole(guacamole)
        self.set_cheese(cheese)
        self.set_pico(pico)
        self.set_corn(corn)
    def set_meat(self, meat):
        self.meat.set_value(meat)
    def set_to_go(self, to_go):
        to_go_list = [True, False]
        if to_go in to_go_list:
            self.to_go = to_go
        else:
            self.to_go = False
    def set_rice(self, rice):
        self.rice.set_value(rice)
    def set_beans(self, beans):
        self.beans.set_value(beans)
    def set_extra_meat(self, extra_meat):
        extra_meat_list = [True, False]
        if extra_meat in extra_meat_list:
            self.extra_meat = extra_meat
        else:
            self.extra_meat = False
    def set_guacamole(self, guacamole):
        guacamole_list = [True, False]
        if guacamole in guacamole_list:
            self.guacamole = guacamole
        else:
            self.guacamole = False
    def set_cheese(self, cheese):
        cheese_list = [True, False]
        if cheese in cheese_list:
            self.cheese = cheese
        else:
            self.cheese = False
    def set_pico(self, pico):
        pico_list = [True, False]
        if pico in pico_list:
            self.pico = pico
        else:
            self.pico = False
    def set_corn(self, corn):
        corn_list = [True, False]
        if corn in corn_list:
            self.corn = corn
        else:
            self.corn = False
    def get_cost(self):
        cost = 5
        if self.meat.get_value() == "chicken" or self.meat.get_value() == "pork" or self.meat.get_value() == "tofu":
            cost += 1
        if self.meat.get_value() == "steak":
            cost += 1.50
        if self.extra_meat == True and not self.meat.get_value() == False:
            cost += 1
        if self.guacamole == True:
            cost += 0.75
        return cost
    def get_meat(self):
        return self.meat.get_value()
    def get_to_go(self):
        return self.to_go
    def get_rice(self):
        return self.rice.get_value()
    def get_beans(self):
        return self.beans.get_value()
    def get_extra_meat(self):
        return self.extra_meat
    def get_guacamole(self):
        return self.guacamole
    def get_cheese(self):
        return self.cheese
    def get_pico(self):
        return self.pico
    def get_corn(self):
        return self.corn

为了使 Burrito 类的肉,米饭和豆类实例与上面的三个类进行通信,我需要将它们的类 getter 和 setter 调用到 Burrito 类 getter 和 setter 中。例如,将肉实例从 Burrito 类发送到 Meat 类,我只需为 Burrito 中的 meat 方法编写 setter,如下所示:

def set_meat(self, meat):
        self.meat.set_value(meat)

如上面的墨西哥卷饼类所示。同样适用于豆类和大米。

现在要从它们回调值,我只是将它们各自的类 getter 调用到我的 Burrito 类 getter 中。

def get_meat(self):
        return self.meat.get_value()

同样适用于大米和豆类类,如上面的墨西哥卷饼类所示:

对于好奇的人来说,这是一个测试它的小方法:

newburrito = Burrito("pork", True, "brown", "pinto", True, True)
print (newburrito.meat.get_value())

再次感谢并为任何语法错误道歉。我希望我的解释足够清楚。请注意,我决定发布我的整个代码,以保持清晰,而不是当我问我的问题时发布的选择代码。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(664)
如何查看小程序的网址:如何在Google中索引重定向的网址:短网址
上一篇
C语言两个数求和:如何在C语言中追加两个数组(array concat c)
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(31条)