[英]NameError When Running Python script through Bash
[英]NameError when running script
運行此腳本時,我收到以下錯誤。
p1=Person1("Plumber",fav_food,ethnicity,name,"male")
NameError: name 'fav_food' is not defined
我是OOP的新手,但據我了解,我定義Person1
類時就定義了fav_food
。 顯然我錯了,但是為什么呢?
class Person():
def __init__(self,job,fav_food,ethnicity,name,gender):
self.job=job
self.fav_food=fav_food
self.ethnicity=ethnicity
self.name=name
self.gender=gender
class Person1(Person):
def __init__(self,job,fav_food,ethnicity,name,gender):
Person.__init__(self,job,fav_food,ethnicity,name,gender)
self.job=job
self.fav_food="chips"
self.ethnicity="white"
self.name=random.shuffle(names)[0]
self.gender=gender
p1=Person1("Plumber",fav_food,ethnicity,name,"male")
從Person1.__init__
刪除所有不必要的參數:
class Person():
def __init__(self, job,fav_food,ethnicity,name,gender):
self.job=job
self.fav_food=fav_food
self.ethnicity=ethnicity
self.name=name
self.gender=gender
class Person1(Person):
def __init__(self,job,gender):
Person.__init__(self,job,"chips","white",random.shuffle(names)[0],gender)
p1=Person1("Plumber", "male")
fav_food
本地定義__init__
和未來實例的命名空間,由於其自行分配__init__
。 您在嘗試使用fav_food
創建Person1
實例的模塊命名空間中未定義該fav_food
,因此會出錯。
Python使用LEGB規則進行變量名解析。 從名稱出現的級別開始,它從L到B搜索。 名稱解析為找到的名字定義。 如果找不到名稱定義,則會發生NameError。
L - Local : 首先在本地函數范圍內查找變量定義
Ë - 內附 : 未來它會在任何封閉功能范圍
G - Global : 然后在模塊級別查找變量定義。 在代碼中,模塊范圍中引用了fav_food
,因此Python要求在模塊級別或更高級別定義fav_food
B- 內置 : 最后, Python查找內置變量定義
除了LEGB名稱解析外,還有object.attribute解析。 在這種情況下, fav_food
將在人員實例中定義: person.fav_food
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.