类是对象,类也是对象类型。字符串、列表、字典等都是Python
中自定义的对象类型。
isinstance(object, class-type-tuple) --->bool
;返回的是bool
值isintance(a, Person)
:判断a
是不是Person
类的实例- 魔术方法
- _str_:
print
的输出 - _repr_:交互式环境下的输出
类和对象类型
class C1:
pass
class C2:
pass
c = C1()
d = C2()
print(type(c))
print(type(d))
image.png
m = 1
isinstance(m,int) # True
m = "hello world"
isinstance(m,int) # False
image.png
创建一个类就是创建了一个对象类型
定制类
如果想自定义类,就要使用类的特殊方法,比如初始化函数init(),通过一个例子来了解其他特殊方法:
class RoundFloat:
def __init__(self, val):
assert isinstance(val, float), "value must be a float"
self.value = round(val, 2)
def __str__(self):
return "{:.2f}".format(self.value)
__repr__ = __str__
if __name__ == "__main__":
r = RoundFloat(3.1415926)
print(r)
print(type(r))
结果:
3.14
<class '__main__.RoundFloat'>
显示分数的类
整个代码的编写思路:
- 将分子和分母当做两个参数传入函数中
- 利用str()方法进行输出
class Fraction:
def __init__(self, number, demon):
self.number = number
self.demon = demon
def __str__(self):
return str(self.number) +"/" + str(self.demon)
__repr__ = __str__
if __name__ == "__main__":
a = Fraction(2,3)
print(a)
分数求和
最大公约数和最小公倍数
- 最大公约数,Greatest Common Divisor, gcd
- 最小公约数,Lowest Common Mutiple, lcm
- lcm(a, b) = (a*b)/gcd(a, b)
def gcd(a, b):
if not a > b:
a, b = b, a
while b != 0:
remainder = a % b
a, b = b, remainder
return a
def lcm(a, b):
return (a * b) / gcd(a, b)
if __name__ == "__main__":
print("最大公约数:",gcd(8,20))
print("最小公倍数:",lcm(8,20))
结果:
最大公约数: 4
最小公倍数: 40.0
- 第一步:20/8 = 2...4,a=8,b=4
- 第二步:8/4=2,a=4, b=0;此时a就是最大公约数
def gcd(a, b):
if not a > b:
a, b = b, a
while b != 0:
remainder = a % b
a, b = b, remainder
return a
def lcm(a, b):
return (a * b) / gcd(a, b)
class Fraction:
def __init__(self, number, demon):
self.number = number
self.demon = demon
def __str__(self):
return str(self.number) + "/" + str(self.demon)
__repr__ = __str__
def __add__(self, other):
lcm_num = lcm(self.demon, other.demon)
number_sum = (lcm_num / self.demon * self.number) + (lcm_num / other.demon * other.number)
return Fraction(number_sum, lcm_num)
if __name__ == "__main__":
m = Fraction(1,3)
n = Fraction(1,2)
s = m + n
print(m,"+",n,"=",s)
通过导入模块来实现
from fractions import Fraction
m, n = Fraction(1, 4), Fraction(2, 5)
m + n
Fraction(13, 20)