我创建了一个类Car并添加了几个函数。添加汽车属性后,您需要显示有关汽车(即对象)的所有数据。当print(brichka)输出时<__main__.Car object at 0x000002127E7A6BA0>,即类位置、名称、对象类型和内存地址。我尝试使用列表来实现输出,或者更准确地说,使用隐式循环迭代器for并添加到列表中info。但是,出现了问题:如果我没有声明列表,我如何迭代object以及为什么编译器不会命中?info.append()而且,为什么self它不能成为迭代的对象(也许答案就在第一个问题中)?因此,我无法2+2以任何可读的形式添加和显示对象的属性。
class Car:
def __init__(self, brand, model):
self.brand = brand
self.model = model
def _Property(self, isProperty):
self.isProperty = isProperty
def Get_Car(self):
for prop in self:
if not prop.startswith('_'):
info.append(prop)
return info
brichka = Car("Toyota", "Mark")
brichka._Property(str(input()))
print(brichka.Get_Car())
UPD:总的来说,我知道你可以closure使用decorator.我得到这样的东西:
def Car(func):
def Has_the_property(*_property):
print(func(*_property))
return Has_the_property
def Some_property(*_property):
return f"{_property}"
addProperty = Car(Some_property)
addProperty(str(input()))
然而,当尝试通过类实现它时,显示有关对象的信息很困难。
如果你只需要以可读的形式打印一个对象的所有信息,并且你事先知道该对象的所有属性名称,那么只需实现类方法
__str__:结论:
如果您确实需要对象的某些任意属性,则只需将它们添加到对象中的某种列表或字典中即可。极少数情况下,您可能需要向类添加任意属性,就像对象字段一样。是的,这对班级来说不安全。
使用自定义属性更新示例:
结论:
我可能会冒着被称为“明显队长”的风险,但你已经非常接近回答你的问题了。 @andreymal 已经在评论中建议了这个解决方案。但是:下面的代码将显示实例的属性列表,而不是类本身。在您的代码中,除了内置视图
__atr__和两个方法 _Property 和 Get_Car 之外,该类根本没有任何属性。但是,据我了解,您只需要实例属性。还有一点小问题:只要你不使用__slots__.任何新属性都会自动显示在列表中。 Python 为你创建了一个包含属性和值的字典,所以额外的。列表和字典只是浪费内存。