用图纸盖楼房(面向对象之python)

面向对象(类——>对象)

python是一种基于类方法编程思想的脚本语言,简单来说就是同Java一样拥有面向对象的主导方向。那么什么是属于面向对象呢?
我对于面向对象的理解,就是将类与对象相结合,形成了多对一的关系,可以使一种类对应许多对象所供使用。
类:
所谓的类,就是用class所定义,然后紧跟类名称的一种代表,为什么说他是一种代表呢,就如同我们想要定义一种狗的大类:

class Dog():
    """一次模拟小狗的简单尝试"""
    def __init__(self,name,age):
        """初始化属性name和age"""
        self.name=name
        self.age=age
    def sit(self):
        """模拟小狗被命令时蹲下"""
        print(self.name.title()+"is now sitting.")

    def roll_over(self):
        """模拟小狗被命令时打滚"""
        print(self.name.title()+"rolled over!")

每只狗都应该有它所对应的名字和年龄,所以我们在类中所定义的名字和年龄,我们就可以称之为是狗类的固有属性,然而小狗可以蹲下,也可以打滚,所以这里的两个sit函数和roll_over函数就是小狗类的两个方法。属性和方法定义完之后,我们就称一个类定义完了。
对象:
但是这里的类 并不能去使用,必须要有对象去使用它,我们在这里可以把类认为仅仅就是一张盖楼房的稿纸图,然而稿纸图可以供工程队造出千千万万所相同的房子供人们使用,但是稿纸却并不是房子,没有办法居住。


my_dog=Dog('zyj',6)
print("dog's name is"+my_dog.name+".")
print("dog's age is"+str(my_dog.age)+".")

当我们需要建房子时,只需调用稿纸,传入我的固有参数,就能对类进行使用,完成对象中所需的要求。
继承,封装,多态:
新类可以继承旧类,就如同说汽车是一个大类,21世纪又发明出了新能源电动汽车,他基本也属于汽车的大类,所以他就可以继续继承原有汽车类的属性和方法。class Newcar(Car)给类加上括号,括号中的类名称就是旧类,这样引用之后,便可获得旧类的一切属性方法。

又有很多人说,类和对象的相互调用配合,不就是函数的定义与使用么,感觉好像没有什么区别,其实最重要的一点就是类的封装,一个类可以定义私有方法或属性,让调用者不能使用,我们只能调用它,却不能对他内部构造进行解析,如我们直到append()方法是对列表的元素添加方法,我们却不能对append方法进行内部勘查,是因为他已经被完全封装起来了。

多态的概念主要还是实现于新类和旧类的结合使用,还是上面的例子,电动汽车包含汽车大类的所有属性,可以原封不动的继承使用,但是电动汽车可以充电,可以接受太阳能等,原来的旧 汽车却不可以,所以这是新汽车的独有方法,我们可以在他继承的基础上进行再定义。进而形成了多态!!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的面向对象电梯仿真的 Python 代码: ```python class Elevator: def __init__(self, floors): self.floors = floors self.current_floor = 1 self.direction = 0 # 0 for idle, 1 for up, -1 for down self.destinations = [] def add_destination(self, floor): self.destinations.append(floor) self.direction = 1 if floor > self.current_floor else -1 def move(self): if self.destinations: if self.current_floor in self.destinations: self.destinations.remove(self.current_floor) if not self.destinations: self.direction = 0 if self.direction == 1: self.current_floor += 1 elif self.direction == -1: self.current_floor -= 1 def __str__(self): return f"Elevator is on floor {self.current_floor} going {'up' if self.direction == 1 else 'down' if self.direction == -1 else 'nowhere'} with destinations {self.destinations}" class Building: def __init__(self, num_floors, num_elevators): self.floors = num_floors self.elevators = [Elevator(num_floors) for _ in range(num_elevators)] def call_elevator(self, floor): elevators = sorted(self.elevators, key=lambda e: abs(e.current_floor - floor)) elevators[0].add_destination(floor) def step(self): for elevator in self.elevators: elevator.move() def __str__(self): return "\n".join(str(elevator) for elevator in self.elevators) ``` 使用方式: ```python # create a building with 10 floors and 2 elevators building = Building(10, 2) # call an elevator to floor 5 building.call_elevator(5) # simulate a few steps building.step() building.step() building.step() # print the state of the elevators print(building) ``` 这个简单的代码模拟了一个有多个电梯的楼房,可以通过 `call_elevator` 方法调用电梯到指定楼层,模拟电梯的运行过程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值