【 Python 】 Python物件導向編程 10 分鐘快速入門

แชร์
ฝัง
  • เผยแพร่เมื่อ 16 พ.ย. 2024

ความคิดเห็น • 9

  • @ShihMengHao
    @ShihMengHao 8 หลายเดือนก่อน +2

    此播放清單41~48都是在講Python的物件導向
    是我在TH-cam看過講最全的教學

    • @CodeShiba
      @CodeShiba  8 หลายเดือนก่อน +1

      謝謝支持 這是我多年學習的心血 感謝支持!

  • @蕭宇承-d7f
    @蕭宇承-d7f 8 หลายเดือนก่อน +1

    哈哈我今天也來學習物件導向!!超棒的影片內容!!
    謝謝你解釋的這麼生活化,學起來很輕鬆

    • @CodeShiba
      @CodeShiba  8 หลายเดือนก่อน

      謝謝支持啦!

  • @dianawong1705
    @dianawong1705 8 หลายเดือนก่อน +2

    物件導向還蠻有趣的欸😂

    • @CodeShiba
      @CodeShiba  8 หลายเดือนก่อน

      對呀 軟體好玩之處在於會把程式比喻成現實世界的東西

  • @BigggRicee
    @BigggRicee 5 หลายเดือนก่อน

    我想问一下python下如何引用不同路径下的函数或者类。比如folder1下的mo1.py想玩引用folder2下的mo2.py的fun2函数。我查了下要么是通过sys模块将被引用路径加入搜索路径,但是太坑了,第一涉及到绝对路径,实在不可用,第二也比较繁琐。另外,有说用使用init空文件将路径转化为package,可直接引用。我在vscode编辑器下,实用的vevn虚拟环境,测试不可用。请问你们平时都怎么解决这个基本问题的😂

    • @CodeShiba
      @CodeShiba  5 หลายเดือนก่อน +1

      在 Python 中,要在不同資料夾之間引用函式或類別,常見的方法是將這些資料夾組織成包(package)。這樣你可以利用 Python 的模組系統來引用不同路徑下的模組。以下是步驟和說明:
      ### 1. 創建包(Package)
      首先,確保每個包含 `.py` 檔案的資料夾中都有一個名為 `__init__.py` 的檔案。這個檔案可以是空的,但它的存在會告訴 Python 該資料夾是一個包。假設你有以下資料夾結構:
      ```
      project_root/

      ├── folder1/
      │ ├── __init__.py
      │ └── mod1.py

      └── folder2/
      ├── __init__.py
      └── mod2.py
      ```
      ### 2. 使用相對導入
      如果 `folder1` 和 `folder2` 位於同一個父資料夾下,你可以在 `mod1.py` 中使用相對導入來引用 `folder2` 下的 `mod2.py` 中的 `fun2` 函式:
      在 `mod1.py` 中寫入:
      ```python
      from ..folder2.mod2 import fun2
      ```
      這裡的 `..` 表示向上移動一個資料夾層級,然後進入 `folder2` 資料夾。
      ### 3. 絕對導入
      你也可以使用絕對導入,尤其是在大型專案中,這會讓路徑更清晰:
      在 `mod1.py` 中寫入:
      ```python
      from project_root.folder2.mod2 import fun2
      ```
      這裡假設 `project_root` 在你的 PYTHONPATH 中或者你的專案根目錄已經作為 Python 專案的工作目錄。
      ### 設定 PYTHONPATH
      如果你在使用的開發環境(比如 VSCode)下遇到模組無法找到的問題,可能需要設定 PYTHONPATH。這樣 Python 解釋器就知道在哪裡尋找你的模組:
      - **在 Unix/Linux/MacOS 中**,你可以在終端中設置:
      ```bash
      export PYTHONPATH="/path/to/project_root:${PYTHONPATH}"
      ```
      - **在 Windows 中**,可以在命令提示字元中設置:
      ```cmd
      set PYTHONPATH=C:\path\to\project_root;%PYTHONPATH%
      ```
      ### 總結
      這些是在 Python 中管理不同路徑下模組的常見方法。選擇使用哪一種方式取決於你的專案需求和個人喜好。理想情況下,使用包和相對/絕對導入可以使你的專案結構清晰並易於維護。

  • @FulingAlex
    @FulingAlex 5 หลายเดือนก่อน +1

    自己写了一个枪的物件导向,或许枪战游戏里面也是类似的写法吧。中间的子弹设置说实话没搞懂
    # oop (物件导向)
    # 物件(Object)是类别(Class)的事例(Instance)
    # Gun(Class)
    # M249(object)
    class gun:
    harm = 20
    distants = 100

    def __init__(self, name, size, color, accessories,bullets=40): # 初始化
    self.name= name
    self.size = size
    self.color = color
    self.accessories = accessories
    self.bullets = bullets
    return None
    def equipped(self):
    print('Rifle equipped with a ' + self.accessories)
    return self
    def shot(self, num_bullets=1):
    if num_bullets > self.bullets:
    print(f"You can't shoot over {self.bullets} bullets.")
    num_bullets = self.bullets # 设置实际射击的子弹数量为弹夹中剩余的子弹数量
    for _ in range(num_bullets):
    self.bullets -= 1
    if num_bullets = 40: # 如果射击的子弹数量大于等于40,表示射击了整个弹夹
    print("You shot the entire clip! Please reload")
    return self
    def hit(self):
    print(f'You hit the target and caused {self.harm} pionts of damage')
    return self
    def check(self) :
    print(f'You have {self.bullets} bullets')
    return self
    def empty(self):
    print(f'{self.bullets} bullets was shot. You should reload.')
    return self
    def reload(self):
    self.bullets = 40
    print(f'Clip restored to {self.bullets} bullets.')
    return self
    class pistol(gun): # 如果什么都没有就写"pass"
    def __init__(self, name, size, color, accessories):
    super().__init__(name, size, color, accessories)
    self.bullets = 20
    self.harm = 15
    def open_flashlight(self):
    print('Flashlingt has been opend.')
    return self

    class rifle(gun):
    def __init__(self, name, size, color, accessories):
    super().__init__(name, size, color, accessories) # 继承初始化
    def double_shot(self):
    print('2 bullets was shot.')
    return self
    class sinper_rifle(gun):
    def __init__(self, name, size, color, accessories):
    super().__init__(name, size, color, accessories)
    self.bullets = 5
    self.harm = 60
    self.distants = 1000
    def open_magnigier(self):
    print('The ' + self.name + "'s magnigier has been opened.")
    return self
    def shot(self, num_bullets=1):
    if num_bullets > self.bullets:
    print(f"You can't shoot over {self.bullets} bullets.")
    num_bullets = self.bullets # 设置实际射击的子弹数量为弹夹中剩余的子弹数量
    super().shot(num_bullets) # 调用父类的shot方法
    if self.bullets