Python之类的练习

万物皆对象

对象 = 属性 + 方法

在python里,所有东西都有id,对象以id作为标识,包含数据(属性)和代码(方法)

类的特点:封装、继承、多态。类名用大写字母表示

对象属性和方法的引用:<对象名>.<属性名>

类的特殊定义
构造器 init(self):也叫初始化
析构器 del(self):销毁对象时调用
还有很多双下划线围着的,
算术操作符:add,sub,mul,div
大小比较:eq,ne,lt,gt,le,ge
字符串:str,repr,len
详细的介绍请查看:
http://gis4g.pku.edu.cn/python-magicmethod/

class Student:
    def __init__(self, name, grade):
        self.name, self.grade = name, grade
       # 内置sort函数只引用 < 比较符来判断前后
    def __lt__(self, other):
        # 重点,成绩比other高的,排在他前面
        return self.grade > other.grade
        # 按照姓名来排序
        # return self.name < other.name
    # Student的易读字符串表示
    def __str__(self):
        return "(%s, %d)" % (self.name, self.grade)
    # Student的正式字符串表示,我们让它跟易读表示相同
    __repr__ = __str__  # __repr__(self):  返回一个用来表示对象的字符串
    # 构造一个Python List对象
s = list()
# 添加Student对象到List中
s.append(Student("Jack", 80))
s.append(Student("Jane", 75))
s.append(Student("Smith", 82))
s.append(Student("Cook", 90))
s.append(Student("Tom", 70))
print("Original:", s)
s.sort()
print("Sorted:", s)

我们平时使用sort()或sorted()默认是从小到大排序。而在这里,sort是根据特殊方法 lt 里返回值是否为True来决定谁在前面。return self.grade > other.grade 假如self.grade的值 比other.grade的值大,这里返回的就是True,那么self.grade就排在前面,也就是sort认为它比other ”小“。

练习题:
题目1:创建一个类People,包含属性name, city。可以转换为字符串形式(str),包含方法moveto(self, newcity),可以按照city排序,创建4个人对象,放到列表进行排序。

代码:

class People:
    def __init__(self,name,city):
        self.name=name
        self.city=city
    def __lt__(self,other):
        return self.city>other.city
    def __repr__(self):
        return f"{self.name},{self.city}"
    def moveto(self,newcity):
        self.city=newcity
p=[]
a=People('Aom','SHai')
b=People('Buddy','GZhou')
c=People('Clia','BJing')
d=People('Doki','SZhen')
p.append(a)
p.append(b)
p.append(c)
p.append(d)
print('original:',p)
p.sort()
print('sorted:',p)
b.moveto('TJ')
c.moveto('WH')
print('sorted again:',p)

题目2:创建一个类Teacher,是People的子类,新增属性school,moveto方法改为newschool,按照school排序。创建4个教师对象,放到列表进行排序。

代码:

class Teacher(People):#子类表示方式
    def __init__(self,name,city,school): #继承父类,并添加子类独有属性
        super().__init__(name,city)   #super函数用来调用已经再子类中重写过的父类方法。
        self.school=school
    def __lt__(self,other):
        return self.school>other.school
    def newschool(self,newschool):
        self.school=newschool
    def __repr__(self):#repr函数返回字符串,str指数据类型
        return f'{self.name},{self.school}'
f=[]
a=Teacher('Aom','SHai','上交')
b=Teacher('Buddy','GZhou','地大')
c=Teacher('Cavid','BJing','清华')
d=Teacher('Doki','SZhen','深大')
f.append(a)
f.append(b)
f.append(c)
f.append(d)
print('original:',f)
f.sort()
print('sorted:',f)
b.newschool('复旦')
c.newschool('北大')
print('sorted again:',f)

题目3:创建一个mylist类,继承自内置数据。类型list(列表)增加一个方法“累乘”product。
def product(self):
返回所有数据项的乘积

class Mylist:
    def __init__(self,x,y):
        self.x,self.y=x,y
    def product(self):
        return self.x*self.y
a=Mylist(4,7)
print(Mylist.product(a))#缺陷在于仅能计算两个数字的乘积

```python
class Mylist(list):
    def product(self):
        p = 1
        for i in self:
            p *= i
        return p

nums = list(map(int, input().split()))#一次输入多个数字并用空格分开。int❤
print(Mylist.product(nums))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值