簡體   English   中英

運行腳本時出現NameError

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM