class Person:
def __init__(self, name):
self.name = name
def clean(self, cleaner):
cleaner.sweep()
print(f"保洁阿姨去{self.name}家打扫卫生", end="")
class Notify:
def __init__(self):
self.name1 = Person()
def sweep(self):
print(f"{self.name1.name}通知保洁阿姨打扫卫生")
Xm = Person("小明")
cleaner = Notify()
Xm.clean(cleaner)
Traceback (most recent call last):
File "/home/tarena/month01/day10/exercise3.py", line 49, in <module>
cleaner = Notify()
File "/home/tarena/month01/day10/exercise3.py", line 45, in __init__
self.name1 = Person()
TypeError: Person.__init__() missing 1 required positional argument: 'name'
######暂时没想到什么解决办法
因为实例化Notify对象的时候没有传递名字,所以导致Notify调用Person的时候没有name参数,所以报错加上一个参数就好了:
class Person:
def __init__(self, name):
self.name = name
def clean(self, cleaner):
cleaner.sweep()
print(f"保洁阿姨去{self.name}家打扫卫生", end="")
class Notify:
def __init__(self, name):
self.name1 = Person(name)
def sweep(self):
print(f"{self.name1.name}通知保洁阿姨打扫卫生")
Xm = Person("小明")
cleaner = Notify("小明")
Xm.clean(cleaner)
修改如下
class Person:
def __init__(self, name):
self.name = name
def clean(self, cleaner):
cleaner.sweep()
print(f"保洁阿姨去{self.name}家打扫卫生", end="")
class Notify:
def __init__(self, name):
self.name1 = Person(name)
def sweep(self):
print(f"{self.name1.name}通知保洁阿姨打扫卫生")
Xm = Person("小明")
cleaner = Notify(Xm.name)
Xm.clean(cleaner)
你的代码有一些错误。首先,在定义Notify类的时候,你在创建一个Person对象时,没有传递任何参数给它。你应该把name参数传递给Person对象,例如:
class Notify:
def __init__(self):
self.name1 = Person("小明")
def sweep(self):
print(f"{self.name1.name}通知保洁阿姨打扫卫生")
另外,在定义Person类时,你没有定义clean方法的形参,所以无法调用它。你应该在clean方法中添加一个形参,例如:
class Person:
def __init__(self, name):
self.name = name
def clean(self, cleaner):
cleaner.sweep()
print(f"保洁阿姨去{self.name}家打扫卫生", end="")
修改后的代码应该是这样的:
class Person:
def __init__(self, name):
self.name = name
def clean(self, cleaner):
cleaner.sweep()
print(f"保洁阿姨去{self.name}家打扫卫生", end="")
class Notify:
def __init__(self):
self.name1 = Person("小明")
def sweep(self):
print(f"{self.name1.name}通知保洁阿姨打扫卫生")
Xm = Person("小明")
cleaner = Notify()
Xm.clean(cleaner)
如果你运行这段代码,它应该会输出:
小明通知保洁阿姨打扫卫生保洁阿姨去小明家打扫卫生
你在创建的时候都要传name参数的,试试这样改改看
class Person:
def __init__(self, name):
self.name = name
def clean(self, cleaner):
cleaner.sweep()
print(f"保洁阿姨去{self.name}家打扫卫生", end="")
class Notify:
def __init__(self, person):
self.name1 = person
def sweep(self):
print(f"{self.name1.name}通知保洁阿姨打扫卫生")
Xm = Person("小明")
cleaner = Notify(Xm)
Xm.clean(cleaner)
问题就在你的Notify:类中的 def init(self):函数中 self.name1 = Person(),此处没有参数传递进去,所以出错了