py入门笔记1

Python:两类之间的关系——关联与依赖

  • 一个对象的属性是另一个类创建的对象(实例用作属性)
  • 一个类中函数的形参是另一个类创建的对象

例题1.1:

注记:A为teacher类,B为course类。

class A:
def init(self , name , age):
self.teacher_name = name
self.teacher_age = age
self.salary = 2000 #设置一个不需外部传递参数的属性salary

class B:
def init(self , course_name , cost , teacher):
self.course_name = course_name
self.course_teacher = teacher #保证类A创建的(以teacher形参命名)的对象能被类B在内部(以self.course_teacher形式)在各个函数内调用
self.course_cost = cost
def class_up(self):
self.course_teacher.salary += self.course_cost #即self.course_teacher = T1

T1 = A(‘张三’,24)
T2 = A(‘李四’,25)
C1 = B(‘高数课’,30,T1) #T1以一个类A对象的形式作为类B的参数
print(C1.course_name) #输出:高数课
#C1.course_teacher= T1, C1.course_teacher.teacher_name = T1.teacher_name
print(C1.course_teacher.teacher_name)
print(C1.course_teacher.teacher_age) #同上
print(C1.course_teacher.salary)
C1.class_up()
print(C1.course_teacher.salary)

关键点
类A创建的对象 = 类B的形参
=> 类B内可调用A的属性和方法 or
类B创建的对象—>形参—>类A的属性和方法(箭头代指访问)

参考原链接:link

例题1.2:

class Car():
def init(self, make, model, year):
self.make = make
self.model = model
self.year = year
def get_descriptive_name(self):
long_name = str(self.year) + ’ ’ + self.make + ’ ’ + self.model
print(“123”)
return long_name.title()

class Battery():
def init(self, battery_size=70):
self.battery_size = battery_size
def describe_battery(self):
print("This car has a " + str(self.battery_size) + “-kWh battery.”)

class ElectricCar(Car):
def init(self, makee, make, model, year):
super().init(make, model, year)
self.makee = makee
self.battery = Battery()

my_tesla = ElectricCar(‘zjh’,‘model’,‘relaxed_、、bear’,‘1998’)
my_tesla.get_descriptive_name()
#print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()

参考详见:入门与实践151页

例题2.1:

class Houseitem:
def init(self,name,area):
self.name = name
self.area = area
def str(self):
return ‘[%s] 占地 %.2f 平米’%(self.name,self.area)

class House:
def init(self,housetype,area):
self.housetype = housetype
self.area = area
self.free_area = area
self.itemslist = []
def add(self, item):
#传入的item形参为House创建的对象,故可直接访问House中属性area
if item.area > self.free_area:
print(’%s 面积太大,无法添加’% item.name)
return
self.itemslist.append(item.name)
self.free_area -= item.area
def str(self):
return (‘户型:%s\n总面积:%.2f\n剩余面积;%.2f\n家具名称列表:%s’
%(self.housetype,self.area,
self.free_area,self.itemslist))

#创建家具
bed = Houseitem(‘席梦思’,400)
chest = Houseitem(“衣柜”,20)
table = Houseitem(‘餐桌’,1.5)
#创建房子
my_house = House(‘两室一厅’,100)
my_house.add(bed)
my_house.add(chest)
my_house.add(table)
print(my_house)

关键点:House类中add函数形参 = Houseitem类创建的对象 => add函数内部可直接用其形参访问Houseitem类中area属性。

例题2.2:

class Gun:
def init(self,model):
self.model = model
self.bullet_count = 0
def add_bullet(self,count):
self.bullet_count += count
def shoot(self):
if self.bullet_count <= 0 :
print(’[%s]没有子弹了…’ % self.model)
return
self.bullet_count -= 1
print(’%s tututu…[%s]’ %(self.model,self.bullet_count))

class Soldier:
def init(self,name):
self.name = name
self.gun = None #避免在外面添加属性
def fire(self):
#判断是否有枪
if self.gun is None:
print(’%s 没有枪…’ % self.name)
return
print(‘冲呀…[%s]’%self.name)
#装填子弹
self.gun.add_bullet(50) #gun中创建的对象是soldier中的属性(self.gun = ak47)故在soldier中可用此属性调用gun中的方法
#发射子弹
self.gun.shoot()

#创建枪对象
ak47 = Gun(‘AK47’)
#创建士兵-许三多
xusanduo = Soldier(‘xusanduo’)
xusanduo.gun = ak47 #用赋值语句把ak47交给许三多,即gun中创建的对象是soldier中的属性
xusanduo.fire()#去调用枪中的 ak47.add_bullet()与 ak47.shoot()


python初学小白一枚,如有错误,恳请各位大神批评指正!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值