Python的类和实例#
Python的类(class)#
属性 vs 方法
定义属性:
__init__
定义方法
self
是什么?
# 实例
[1,2,3]
[1, 2, 3]
# 类
list
list
class Person:
def __init__(self, name, age):
"""
类的构造器,我们在这里定义实例属性
"""
# self.<属性> = 参数 or 经过计算
self.name = name
self.age = age
def is_adult(self):
"""
定义实例方法
"""
if self.age>=18:
return True
else:
return False
def some_method(self, arg):
return self.name + '_' + str(arg)
def __str__(self):
return "一个叫做" + self.name + "的人"
def __repr__(self):
return self.name
Python的实例#
# 创建实例
person = Person("小明", 20)
# 访问实例属性
person.name
'小明'
person.age
20
# 访问实例方法
# 对象.函数(参数)
person.is_adult()
True
# 带参数
person.some_method('是我兄弟')
'小明_是我兄弟'
print(person)
一个叫做小明的人
person
小明
练习题#
练习题1#
定义PrimeList
类,这个类接受传入的参数n(n>=2),生成从2到n的所有质数。
data属性以列表形式存储数据。
此类可以自定义计算所有列表质数之和。
def is_prime(i):
"""
判断i是不是质数,返回True/False
"""
pass
def get_primes(n):
"""
?
"""
prime_list = []
for i in range(2, n+1):
if is_prime(i):
prime_list.append(i)
return prime_list
class PrimeList(object):
def __init__(self, n):
pass
def my_sum(self):
pass
预期达到的调用效果如下:
prime_list = PrimeList(100)
prime_list.my_sum()
练习题2#
自定义Vector类,实现向量常见的操作,比如加、减、点乘。
class Vector(object):
def __init__(self, *arg):
self.arg = arg
def __len__(self):
return len(self.arg)
def __add__(self, vector2):
"""
重新定义加法
"""
data1 = self.arg
data2 = vector2.arg
assert len(data1) == len(data2), "长度不一致"
result = []
for i in range(len(self)):
value = data1[i] + data2[i]
result.append(value)
return result
def __sub__(self, vector2):
"""
重新定义减法
"""
pass
def __neg__(self):
"""
重新定义负号
"""
pass
def dot(self, vector2):
"""
点积,调用方式为 vector1.dot(vector2)
"""
pass
def __str__(self):
return "Vector(" + str(self.data) + ")"
vector1 = Vector(1,2,3)
vector2 = Vector(3,4,5)
vector3 = Vector(3,4,5,6)
len(vector1)
3
vector1 + vector2
[4, 6, 8]
vector1 + vector3
---------------------------------------------------------------------------
AssertionError Traceback (most recent call last)
Cell In[17], line 1
----> 1 vector1 + vector3
Cell In[13], line 15, in Vector.__add__(self, vector2)
12 data1 = self.arg
13 data2 = vector2.arg
---> 15 assert len(data1) == len(data2), "长度不一致"
17 result = []
18 for i in range(len(self)):
AssertionError: 长度不一致
vector1 - vector2
- vector1
vector1.dot(vector2)
class Person:
def __init__(self, *arg):
self.arg = arg
def __len__(self):
return len(self.arg)
def __add__(self, vector2):
self.arg
vector2.arg
return
person = Person(1,2,3)
len(person)
len((1,2,3))