Python 如何为类的实例设置一组特定的打印指令?

Python 如何为类的实例设置一组特定的打印指令?,python,class,object,printing,Python,Class,Object,Printing,我希望为我的类实例的打印设置具体的说明。例如,我有一个类food(有价格、评级和客户偏好等细节,有一个对象龙虾和鸡肉。这两个对象都有不同的细节,我希望做的是,当我调用一个对象打印时,它会打印出它自己特有的细节。我该怎么做?我似乎无法简单地用正确的词来找到答案搜索,所以我想我可以在这里提问。面向对象编程的整个思想是,类定义了一组特定相关对象的基本行为。类的单个实例的特定行为通常是通过在初始化实例时传递不同的属性来实现的 在这里,您需要将这些变量定义为\uuuu init\uuu构造函数中的类属性,

我希望为我的类实例的打印设置具体的说明。例如,我有一个类
food
(有价格、评级和客户偏好等细节,有一个对象<代码>龙虾<代码>和<代码>鸡肉<代码>。这两个对象都有不同的细节,我希望做的是,当我调用一个对象打印时,它会打印出它自己特有的细节。我该怎么做?我似乎无法简单地用正确的词来找到答案搜索,所以我想我可以在这里提问。

面向对象编程的整个思想是,类定义了一组特定相关对象的基本行为。类的单个实例的特定行为通常是通过在初始化实例时传递不同的属性来实现的

在这里,您需要将这些变量定义为
\uuuu init\uuu
构造函数中的类属性,然后在为不同的产品创建实例时提供不同的值:

类食品:
定义初始(self,名称:str,价格:float,评级:int,客户偏好):
self.name=名称
self.price=价格
自我评价=评价
self.customer\u preference=客户偏好
def打印信息(自身):
打印(f'{self.name.capitalize()}成本为${self.price},评级为{self.rating}'
鸡肉=食物(“鸡肉”,12.50,85,无)
鸡。打印信息()
这将输出:

鸡肉价格为12.50美元,评级为85。

不确定您计划如何使用
customer\u preference
属性,因此我将
None
作为值传递给构造函数

编辑: 我们还可以使用
@classmethod
decorator仅基于产品名称返回类的特定实例:

class Food:
    mapper = {'chicken' : {'price' : 12.50, 'rating' : 85, 'customer preference': None},
        'okra' : {'price' : 8.40, 'rating' : 70, 'customer preference' : 'vegetarian'}}
    
    def __init__(self, name: str, price: float, rating: int, customer_preference: str):

       self.name = name
       self.price = price
       self.rating = rating
       self.customer_preference = customer_preference
    
    @classmethod
    def from_name(cls, name: str, mapper=mapper):
        price = mapper[name]['price']
        rating = mapper[name]['rating']
        customer_preference = mapper[name]['customer preference']
        
        return cls(name, price, rating, customer_preference)
    
    def print_stuff(self):
        if self.customer_preference:
            print(f'{self.name.capitalize()} costs ${self.price}, has a rating of {self.rating} and is suitable for {self.customer_preference} diet.')
            
        else:
            print(f'{self.name.capitalize()} costs ${self.price} and has a rating of {self.rating}.')
            
okra = Food.from_name('okra')
okra.print_stuff()
这将产生:


Okra的价格为8.4美元,评级为70,适合素食。

也许需要强调的是,面向对象编程的整个要点是,类定义了一般行为,而单个实例包含该实例中该行为的参数,通常是通过实例属性的方式。我实际上是在寻根对于使用该方法的方法,
print(chicken)
,结果类似,该方法也是类方法中内置的。但是,这对我来说是一个很好的选择。谢谢。@MhonnYbañez,请参阅更新的答案,以获得带有
@classmethod
的版本。