python之路(7)

1.改进房子家具类的代码

class House:

    def __init__(self, name, total_area):
        self.name = name
        self.total_area = total_area
        self.item_list = []
        self.free_area = self.total_area

    def __str__(self):
        # items = ', '.join([item.name for item in self.item_list])
        # return f'户型为{self.name},总面积为{self.total_area},剩余面积为{self.free_area},家具名称列表为{items}'
        return f'户型为{self.name},总面积为{self.total_area},剩余面积为{self.free_area},家具名称列表为{self.item_list}'
    def add_item(self, item):
        if self.free_area > item.area:
            # self.item_list.append(item)
            self.item_list.append(item.name)
            self.free_area -= item.area


class HouseItem:
    """家具类"""
    def __init__(self, name, area):
        self.name = name
        self.area = area

    def __str__(self):
        return f'家具为{self.name},占地面积为{self.area}'

bed = HouseItem('bed',4)
chest = HouseItem('chest',2)
table = HouseItem('table',1.5)

my_house = House('三室一厅',8)
my_house.add_item(bed)
my_house.add_item(chest)
my_house.add_item(table)
print(my_house)
# print(dir(my_house))

后期:一个页面定义一个类

class LoginPage:
    def __init__(self,username,password,code):
        self.username = username
        self.password = password
        self.code = code
        self.button = '登录'

    def login(self):
        print(f'{self.username}登陆成功')

usr = LoginPage('ww','123456','123')
usr.login()

class Person:
    def __init__(self, name,age):
        self.name = name
        # 私有的本质 是python解释器执行代码 发现属性名或者方法名前面有两个_ 会将这个名字重命名
        # 将其加上_类名的前缀
        # self.__age ==> self._Person__age
        self.__age = age #将其定义为私有属性
    def __str__(self): # 在类内部可以访问私有属性
        return f'{self.name},{self.__age}'

xm = Person('小明',18)
print(xm)

# print(xm.__age) # 在类的外部不能直接使用私有属性
print(xm.__dict__)
# {'name': '小明', '_Person__age': 18}
xm.__age = 20 # 这个不是修改私有属性 是添加了一个公有的属性 __age
print(xm)
print(xm.__dict__)
# {'name': '小明', '_Person__age': 18, '__age': 20}
print(xm._Person__age)
xm._Person__age = 19
print(xm)
print(xm.__dict__)
# {'name': '小明', '_Person__age': 19, '__age': 20}

真正去修改私有属性 放在共有方法里面:

封装:定义类的过程

继承:相同代码不重复

注意是共有的属性和方法

python支持多继承 但不经常用

class Animal:
    def eat(self):
        print('eat')

class Dog(Animal):
    def bar(self):
        print('bar')

class XTQ(Dog):
    pass

ani = Animal()
ani.eat()

dog = Dog()
dog.eat()
dog.bar()

x = XTQ()
x.eat()
x.bar()

class Dog:
    def bark(self):
        print('bbbbbb')

class XTQ(Dog):
    def bark(self):
        print('aaaaaa')

xtq = XTQ()
xtq.bark()
Dog().bark()

class Dog:
    def bark(self):
        print('bbbbbb')

class XTQ(Dog):
    def bark(self):
        super().bark() #先调用父类方法
        print('aaaaaa')

xtq = XTQ()
xtq.bark()
Dog().bark()

super() 也是一个类 继承object

多态:

class Person:
    def work(self):
        print('人在工作')
class Test(Person):
    def work(self):
        print('测试')
class Code(Person):
    def work(self):
        print('开发')

class Company:
    def show_work(self,worker):
        worker.work()

p = Person()
t = Test()
c = Code()
cc = Company()
cc.show_work(t)
cc.show_work(c)
cc.show_work(p)

属性和方法

Python一切皆对象

即 使有class定义的类 也是一个对象

对象的划分:实例对象(实例) 类对象(类)

创建出来的 对象 叫做类的实例

属性的划分:

实例属性 概念 是实例对象 具有的属性

类属性 概念 是类对象 具有的属性

需要同时变化的是 类属性 共有的 可以定义为类属性

class Dog:
    count = 0 #统计类的对象数
    def __init__(self,name):
        self.name = name
        # 每创建一个对象 就会调用init方法
        Dog.count +=1

print(Dog.count)
Dog('qq')
dog = Dog('ww')
dog2 = dog # no
dog3 = Dog # no
print(Dog.count) # 2
print(dog.count) # 2
dog4 = Dog('aa')
print(dog.count) # 3 
类属性同一变化

实例方法: 对象.方法名()

优化 使用类方法(整体) 静态方法

import random
class Game:
    top_score = 0
    def __init__(self,name):
        self.name = name
    @staticmethod
    def show_help():
        print('这是游戏的帮助信息')
    @classmethod
    def show_top_score(cls):
        print(f'游戏最高分为{Game.top_score}')
    def start_game(self):
        num = random.randint(10,100)
        if num>Game.top_score:
            Game.top_score = num
        print(f'{self.name}本次得分为{num}')

xw = Game('小王')
xw.start_game()
Game.show_top_score()
xw.start_game()
Game.show_top_score()
Game.show_help()

  • 11
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值