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