python h.w中的对象和属性

python h.w中的对象和属性,python,Python,我让h.w建立了一个简单的类。 我有两个def的问题:拒绝拥有者和拒绝拥有者 这是我的代码(更正后): 我仍然在disallcarsorted()中遇到一些错误 错误: 文件“”,第3行,已解除连接 打印(已分类(车主、所有车)) TypeError:“类的用途似乎与它提供的不同 类是用于创建实例的原型(如reciepe或blueprint)。因此,CarOwner类是车主可以拥有哪些属性和操作的接收者。您不应该使用类作为数据的容器,比如收集所有所有者的列表。这就是列表的用例,可能还有元类 如果

我让h.w建立了一个简单的类。 我有两个def的问题:拒绝拥有者和拒绝拥有者

这是我的代码(更正后):

我仍然在disallcarsorted()中遇到一些错误

错误:

文件“”,第3行,已解除连接 打印(已分类(车主、所有车))


TypeError:“类的用途似乎与它提供的不同

类是用于创建实例的原型(如reciepe或blueprint)。因此,
CarOwner
类是车主可以拥有哪些属性和操作的接收者。您不应该使用类作为数据的容器,比如收集所有所有者的列表。这就是列表的用例,可能还有元类

如果您想要所有车主的列表,您应该创建一个
车主的多个实例
,并将它们保存在一个列表中,而不是将所有数据保存在不同实例中的一个集合中

我对您的代码做了一些修改,以提供一个简单OOP的示例以及如何封装类;注意类
Car
的抽象、
\uuuuu str\uuuuu
的使用和初始化器,它们只进行初始化;我希望它能成为一个很好的例子

class Car:
    def __init__(self, manufacture, production_year):
        self.manufacture = manufacture
        self.production_year = production_year

    def __str__(self):
        return '{} {}'.format(self.manufacture, self.production_year)

class CarOwner:
    def __init__(self, name):
        self.name = name
        self.cars = []

    def add_car (self, car):
        self.cars.append(car)

def print_cars (car_owner):
    for car in car_owner.cars:
        print(car)

def print_owners (car_owners):
    for car_owner in car_owners:
        print('Cars owned by {}:'.format(car_owner.name))
        for car in car_owner.cars:
            print(car)


jane = CarOwner("Jane")
jane.add_car(Car("Mitsubishi", 2017))

bob = CarOwner("Bob")
bob.add_car(Car("Mazda", 2013))
bob.add_car(Car("BMW", 2012))

owners = [jane, bob]

print_cars(jane)
print('===')
print_owners(owners)

@乌列尔这就是我的老师要求的,你知道失主的问题是什么吗?@hila_de因为这是家庭作业,我不会直截了当地告诉你出了什么问题。但我会提供一些提示。首先,想想你对车主的投入。for循环中的
owner
变量的类型与列表中的类型相同。如果你很难想象,打印出清单,这样你就能清楚地看到里面有什么。一旦你看到了,问题就应该清楚了。@hila_de看看我贴的答案。如果这是家庭作业,我可以告诉你它是不完整的,你应该看远一点,写下主要部分是存储所有者;但它会让你对课程有一个大致的了解。请注意使用list来保留所有所有者。为什么我需要str?@hila_de invocation for implicit
str
(在调用
print
时调用)。如果你的班级级别是高中,你可能不应该使用它。@Uriel我只是好奇,为什么你认为
\uu str\uu()
不应该在高中编程级别使用?@ChristianDean我认为不应该使用,而不是学习;只是因为很多老师(其中很多我见过)会把它当作作弊(未学习的材料和东西),有时甚至不理解它themselves@Uriel我懂了。谢谢你的澄清。
class Car:
    def __init__(self, manufacture, production_year):
        self.manufacture = manufacture
        self.production_year = production_year

    def __str__(self):
        return '{} {}'.format(self.manufacture, self.production_year)

class CarOwner:
    def __init__(self, name):
        self.name = name
        self.cars = []

    def add_car (self, car):
        self.cars.append(car)

def print_cars (car_owner):
    for car in car_owner.cars:
        print(car)

def print_owners (car_owners):
    for car_owner in car_owners:
        print('Cars owned by {}:'.format(car_owner.name))
        for car in car_owner.cars:
            print(car)


jane = CarOwner("Jane")
jane.add_car(Car("Mitsubishi", 2017))

bob = CarOwner("Bob")
bob.add_car(Car("Mazda", 2013))
bob.add_car(Car("BMW", 2012))

owners = [jane, bob]

print_cars(jane)
print('===')
print_owners(owners)