py入门笔记1

    科技2022-08-19  122

    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初学小白一枚,如有错误,恳请各位大神批评指正!

    Processed: 0.008, SQL: 9