Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我发现了这个递归错误。我不能';了解问题出在哪里_Python_Python 3.x_Python 3.9 - Fatal编程技术网

Python 我发现了这个递归错误。我不能';了解问题出在哪里

Python 我发现了这个递归错误。我不能';了解问题出在哪里,python,python-3.x,python-3.9,Python,Python 3.x,Python 3.9,运行以下代码时: class Book: def __init__(self, isbn, title, author, publisher, pages, price, copies): self.isbn = isbn self.title = title self.author = author self.publisher = publisher self.pages = pages

运行以下代码时:

class Book:
    def __init__(self, isbn, title, author, publisher, pages, price, copies):
        self.isbn = isbn
        self.title = title
        self.author = author
        self.publisher = publisher
        self.pages = pages
        self.price = price
        self.copies = copies

    def display(self):
        print("==" * 15)
        print(f"ISBN:{self.isbn}")
        print(f"Title:{self.title}")
        print(f"Author:{self.author}")
        print(f"Copies:{self.copies}")
        print("==" * 15)

    def in_stock(self):
        if self.copies > 0:
            return True
        else:
            return False

    def sell(self,):
        if self.copies > 0:
            self.copies -= 1
        else:
            print("Out of Stock")

    @property
    def price(self):
        return self.price

    @price.setter
    def price(self, new_price):
        if 50 < new_price < 500:
            self.price = new_price
        else:
            raise ValueError("Invalid Price")


book1 = Book("957-4-36-547417-1", "Learn Physics", "Professor", "sergio", 350, 200, 10)
book2 = Book("652-6-86-748413-3", "Learn Chemistry", "Tokyo", "cbc", 400, 220, 20)
book3 = Book("957-7-39-347216-2", "Learn Maths", "Berlin", "xyz", 500, 300, 5)
book4 = Book("957-7-39-347216-2", "Learn Biology", "Professor", "sergio", 400, 200, 0)

books = [book1, book2, book3, book4]
for book in books:
    book.display()

Professor_books = [Book.title for Book in books if Book.author == "Professor"]
print(Professor_books)
课程手册:
定义初始(self、isbn、标题、作者、出版商、页面、价格、副本):
self.isbn=isbn
self.title=标题
self.author=作者
self.publisher=publisher
self.pages=页面
self.price=价格
self.copies=副本
def显示(自):
打印(“=”*15)
打印(f“ISBN:{self.ISBN}”)
打印(f“标题:{self.Title}”)
打印(f“作者:{self.Author}”)
打印(f“副本:{self.Copies}”)
打印(“=”*15)
def库存(自身):
如果self.copies>0:
返回真值
其他:
返回错误
def sell(self,):
如果self.copies>0:
self.copies-=1
其他:
打印(“缺货”)
@财产
def价格(自我):
返回自己的价格
@价格制定者
def价格(自身、新_价格):
如果50<新价格<500:
self.price=新价格
其他:
提高价值错误(“无效价格”)
book1=Book(“957-4-36-547417-1”,“学习物理”,“教授”,“塞尔吉奥”,350200,10)
book2=Book(“652-6-86-748413-3”,“学习化学”,“东京”,“cbc”,400,220,20)
book3=书本(“957-7-39-347216-2”,“学习数学”,“柏林”,“xyz”,500300,5)
book4=Book(“957-7-39-347216-2”,“学习生物学”,“教授”,“塞尔吉奥”,400200,0)
书籍=[book1,book2,book3,book4]
对于书本中的书本:
图书陈列
Professor_books=[Book.title for Book in books if Book.author==“Professor”]
印刷品(教授书籍)
我得到以下无限递归错误:

Traceback (most recent call last):
  File "test.py", line 43, in <module>
    book1 = Book("957-4-36-547417-1", "Learn Physics", "Professor", "sergio", 350, 200, 10)
  File "test.py", line 8, in __init__
    self.price = price
  File "test.py", line 38, in price
    self.price = new_price
  File "test.py", line 38, in price
    self.price = new_price
  File "test.py", line 38, in price
    self.price = new_price
  [Previous line repeated 993 more times]
  File "test.py", line 37, in price
    if 50 < new_price < 500:
RecursionError: maximum recursion depth exceeded in comparison
回溯(最近一次呼叫最后一次):
文件“test.py”,第43行,在
book1=Book(“957-4-36-547417-1”,“学习物理”,“教授”,“塞尔吉奥”,350200,10)
文件“test.py”,第8行,在_init中__
self.price=价格
文件“test.py”,第38行,价格
self.price=新价格
文件“test.py”,第38行,价格
self.price=新价格
文件“test.py”,第38行,价格
self.price=新价格
[上一行重复了993次]
文件“test.py”,第37行,价格
如果50<新价格<500:
RecursionError:比较中超出了最大递归深度
您没有告诉我们哪一行给了您错误,但我可以看到您的
price
属性设置器正在分配给
self.price
,这将导致无限递归,因为它也会调用设置器,等等

价格需要一个非属性支持字段-通常会在此类名称前加下划线(
self.\u price
):

@属性
def价格(自我):
返回自己的价格
@价格制定者
def价格(自身、新_价格):
如果50<新价格<500:
自身价格=新价格
其他:
提高价值错误(“无效价格”)

您遇到了什么样的错误?递归错误重复:谢谢,明白了!
    @property
    def price(self):
        return self._price

    @price.setter
    def price(self, new_price):
        if 50 < new_price < 500:
            self._price = new_price
        else:
            raise ValueError("Invalid Price")