ขนาดวิดีโอ: 1280 X 720853 X 480640 X 360
แสดงแผงควบคุมโปรแกรมเล่น
เล่นอัตโนมัติ
เล่นใหม่
此播放清單41~48都是在講Python的物件導向是我在TH-cam看過講最全的教學
謝謝支持 這是我多年學習的心血 感謝支持!
哈哈我今天也來學習物件導向!!超棒的影片內容!!謝謝你解釋的這麼生活化,學起來很輕鬆
謝謝支持啦!
物件導向還蠻有趣的欸😂
對呀 軟體好玩之處在於會把程式比喻成現實世界的東西
我想问一下python下如何引用不同路径下的函数或者类。比如folder1下的mo1.py想玩引用folder2下的mo2.py的fun2函数。我查了下要么是通过sys模块将被引用路径加入搜索路径,但是太坑了,第一涉及到绝对路径,实在不可用,第二也比较繁琐。另外,有说用使用init空文件将路径转化为package,可直接引用。我在vscode编辑器下,实用的vevn虚拟环境,测试不可用。请问你们平时都怎么解决这个基本问题的😂
在 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` 中寫入:```pythonfrom ..folder2.mod2 import fun2```這裡的 `..` 表示向上移動一個資料夾層級,然後進入 `folder2` 資料夾。### 3. 絕對導入你也可以使用絕對導入,尤其是在大型專案中,這會讓路徑更清晰:在 `mod1.py` 中寫入:```pythonfrom 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 中管理不同路徑下模組的常見方法。選擇使用哪一種方式取決於你的專案需求和個人喜好。理想情況下,使用包和相對/絕對導入可以使你的專案結構清晰並易於維護。
自己写了一个枪的物件导向,或许枪战游戏里面也是类似的写法吧。中间的子弹设置说实话没搞懂# 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 selfclass 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 selfclass 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
此播放清單41~48都是在講Python的物件導向
是我在TH-cam看過講最全的教學
謝謝支持 這是我多年學習的心血 感謝支持!
哈哈我今天也來學習物件導向!!超棒的影片內容!!
謝謝你解釋的這麼生活化,學起來很輕鬆
謝謝支持啦!
物件導向還蠻有趣的欸😂
對呀 軟體好玩之處在於會把程式比喻成現實世界的東西
我想问一下python下如何引用不同路径下的函数或者类。比如folder1下的mo1.py想玩引用folder2下的mo2.py的fun2函数。我查了下要么是通过sys模块将被引用路径加入搜索路径,但是太坑了,第一涉及到绝对路径,实在不可用,第二也比较繁琐。另外,有说用使用init空文件将路径转化为package,可直接引用。我在vscode编辑器下,实用的vevn虚拟环境,测试不可用。请问你们平时都怎么解决这个基本问题的😂
在 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 中管理不同路徑下模組的常見方法。選擇使用哪一種方式取決於你的專案需求和個人喜好。理想情況下,使用包和相對/絕對導入可以使你的專案結構清晰並易於維護。
自己写了一个枪的物件导向,或许枪战游戏里面也是类似的写法吧。中间的子弹设置说实话没搞懂
# 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