class Item:
pay_rate = 0.8 # The pay after %20 discount
all = []
def __init__(self, name: str, price: float, quantity=0):
#Run validations to the recieved arguments
assert price >= 0, f"Price {price} is not greater than or equal tozero!"
assert quantity >= 0, f"Quantity {quantity} is not greater than or equal to zero!"
# Assign to self object
self.name = name
self.price = price
self.quantity = quantity
#Actions to execute
Item.all.append(self)
def calculate_total_price(self):
return self.price * self.quantity
def apply_discount(self):
self.price = self.price * self.pay_rate
@classmethod
def instantiate_from_csv(cls):
with open('items.csv', 'r') as f:
reader = csv.DictReader(f)
items = list(reader)
for item in items:
Item(
name=item.get('name'),
price=float(item.get('price')),
quantity=int(item.get('quantity')),
)
@staticmethod
def is_integer(num):
#We will count out the floats that are .0
if isinstance(num, float):
#Count out the floats that are point zero
return num.is_integer()
elif isinstance(num, int):
return True
else:
return False
def __repr__(self):
return f"Item('{self.name}', {self.price}, {self.quantity})"
我目前正在学习python,并试图理解OOP的概念。除了下面几行之外,我都理解了
def is_integer(num):
#We will count out the floats that are .0
if isinstance(num, float):
#Count out the floats that are point zero
return num.is_integer()
elif isinstance(num, int):
return True
else:
return False
有人能解释一下为什么num.is_integer()返回False吗?该函数的定义目的是从100.0或50.0这样的浮点数中删除.0(教程中是这么说的)
这是我第一次遇到这种类型的返回用法。我习惯于返回a*B或返回'Hi'类型的东西。
4条答案
按热度按时间bxpogfeg1#
如果你的is_integer()函数返回False,那是因为你传递了一个浮点数,其中有一个重要的小数部分,或者是一些既不是int也不是float的对象。
您可能会发现对该函数的此更改很有用:
yqlxgs2m2#
首先,这种类型的回报没有什么不寻常的。举个例子:
return 'Hi'
-返回字符串“Hi”return a * b
-假设a=3,B=5,它计算a*b并返回结果,15return num.is_integer()
-检查数字是否为整数,并返回结果True或False关于is_integer()的一个注意事项,它会说
50
和50.0
都是整数,尽管严格地说,在Python中50
是一个int数据类型,50.0
是一个float数据类型,如果你带着这些知识阅读下面的代码,那么它似乎做了同样的事情,除了你会用Item.is_integer(50)
调用它。6yjfywim3#
我正在学习同样的教程,实际上我来这里是为了理解同样的事情。从我所查找的内容来看,由于教程中的编写方式,这里存在一些混乱。对于像我们这样的初学者来说,这看起来像一个递归函数,整个过程似乎处于循环中,而实际上它并不是,is_integer()是一个预定义函数(文档链接:https://python-reference.readthedocs.io/en/latest/docs/float/is_integer.html)
在我看来,一种更好的写法是将函数定义为check_integer或其他类型,这样就不会有任何歧义。
aiazj4mn4#
只需要记住,具有相同名称和不同参数的函数是不同的
在我们的案例中
我也在freecodecamp youtube频道遵循相同的教程,使用python https://www.youtube.com/watch?v=Ej_02ICOIgs&t=968s进行面向对象编程
在1:09:00时间戳,我遇到了类似的困惑,所以我单独运行并理解了它,我们没有从num中删除任何.0,我们使用了递归。
内部使用的. is_integer()函数(不带参数)是内置函数enter link description here
因此,内置函数通常会删除.0存在,并对整数返回true,对指针值返回false。为了更好地理解,我检查了几个输入
对于整数
检查浮动
检查看起来像12.0
的整数