类的关联关系
一个类调用另一个类的属性和函数方法
“”"
公路(Road):
属性:公路名称 , 公路长度
车(Car):
属性: 车名,时速
方法: 1.求车名在那条公路上以多少的时速行驶了多久
get_time(self,road)
2.初始化车属性信息__init__ 方法
3.打印对象显示车的属性信息
“”"
//import random
class Road: #定义Road类
def __init__(self,name,len):
self.name=name
self.len=len
def func(self):
print('123')
class Car: #定义Car类
def __init__(self,brand,speed):
self.brand=brand
self.speed=speed
def get_time(self,road): #!!!!! 重点:::road可以是个对象 road和r指向同一地址 另外要注意 形参只能接收对象 不能接收类
ran_time=random.randint(1,10)
msg='{}品牌的车在{}上以{}速度行驶{}小时{}'.format(self.brand,road.name,self.speed,ran_time,road.func()) #调用了road这个形参传入的类 这个类中类的.name road.name 还有类的函数road.func(),输出的结果带None,如果想去除None,就给func添加返回值
return msg
def __str__(self): #对象调用该类时 调用完后自动执行str
return '{}品牌的,速度:{}'.format(self.brand,self.speed)
print('------------------------二号has a例子---------------')
#创建实例化对象
r=Road('京藏高速',120)
audi=Car('奥迪',120) #调用str方法 return给一个对象 必须有个对象来接收值
print(audi) #输出类的str返回的值
print(r.name)
audi.get_time(r) #将一个对象当成参数传输
print(audi.get_time(r))
#因为r指向类 r改变了类地址中的属性 输出的就不同
R=Road('京藏高速',120) #每次一个对象调用类 类都会创建一个新的地址 复制类到这个新地址中 每个对象都只能指向一个新地址 同时创建两个对象 就同时指向两个地址
r.name='沪杭高速'
print(audi.get_time(r))
print(audi.get_time(R))
结果为
'------------------------二号has a例子---------------'
奥迪品牌的,速度:120
京藏高速
123
123
奥迪品牌的车在京藏高速上以120速度行驶4小时None
123
奥迪品牌的车在沪杭高速上以120速度行驶6小时None
123
奥迪品牌的车在京藏高速上以120速度行驶1小时None
二号例子
#student book computer
#知识点: 1。has a 一个类中使用了另外一种自定义的类型
# student使用了computer
# 2.类型:
# 系统类型:str int float list dict tuple set
# 自定义类型: 自定义的类 都可以将其当成一种类型 s=Student() s是Student类型的对象
//
class Computer:
def __init__(self,brand,type,color):
self.brand=brand
self.type=type
self.color=color
def online(self):
print('正在用电脑上网')
def __str__(self):
return self.brand+'---'+self.type+'---'+self.color
class Book:
n=0
def __init__(self,bookname,author,number):
self.name=bookname
self.author=author
self.number=number
def reduce(self):
global n
n+=1
return n
def __str__(self):
return self.name+'-*****--'+self.author
class Student:
def __init__(self,name,computer,book):
self.name=name
self.computer=computer
self.book=book
self.books=[] #建议用列表 保存多本书 我多给你传几本
self.books.append(book.author) #book引用其他类的对象
def borrow_book(self,book):
for i in self.books: #self.books已在init中定义了 且在后边的对象调用中先执行过了
if i==book.name: #i将遍历列表中的作者和书名
print('已经借过此书')
break
else:
#将参数book添加到列表中
self.books.append(book.name)
print('借书成功')
break
# self.books.append(book)
def show_book(self):
for book in self.books:
print(book)
def __str__(self):
#自定义类型 需用str强转 list也需要str一下
return self.name+'---'+str(self.computer)+'---'+str(self.books)
#创建对象
computer=Computer('mac','pro','浅灰色')
book1=Book('盗墓笔记','南派三叔',10)
book2=Book('鬼吹灯','天下霸唱',8)
stu=Student('songsong',computer,book1) #形参的类型 除了系统定义的str int list dict float 之外 还有用户自定义类型 :类 比如Computer类型 Book类
print(stu)
stu.show_book()
print('第二次借书')
stu.borrow_book(book2)
stu.borrow_book(book1)
stu.show_book()```
结果为
songsong---mac---pro---浅灰色---['南派三叔']
南派三叔
第二次借书
借书成功
借书成功
南派三叔
鬼吹灯
盗墓笔记