網頁

2019年5月16日 星期四

Python Class

Python是一種物件導向的程式語言(OOPS)。 這意味著,python中的所有內容都是某些class的object或instance,簡單來說,Python class是一種object的藍圖, 或者說它是初始化variables,定義methods,static methods,class methods等組合而成。在本文中,我們將展示如何在Python中創建class,創建class的object或instance,修改object,刪除object或instance。


Creating an Empty Class in Python
如果你想創建一個什麼都不做的Python class。 或者如果要創建一個空的class,則必須在該類中使用pass關鍵字。

# Python Class example
 
class Employee:
    pass

以下示例向您展示如何宣告一個variable以及如何在類中創建一個method。

class Employee:
    Variable = Value
 

    def function_name(self):
        Statements 
    …………..

Python class Object
在Python中,class object支援attribute reference和instantiation。 您可以使用任何一個來呼叫class attribute。 以下是instantiation和attribute reference的例子。

1. attribute reference使用ClassName.Variable_name或ClassName.function_name。
2. 對於instantiation,您必須創建該class的instance(或該class的copy)。 要創建instance,請使用instance_name = class_Name(),用instance_name.variable_name來呼叫variable而instance_name.method_name()用來呼叫method。

這裡,emp = Employee()正在創建一個instantiation,而emp.company在print中意謂著呼叫class variable。 接下來,Employee.company是attribute reference的例子。

class Employee:
    company = 'Tutorial Gateway'
 
emp = Employee()
print(emp.company)
 
print("-------------")
print(Employee.company)

在這個例子中,我們宣告了一個variable company,並定義了一個帶有self參數的function,用於印出歡迎消息。 接下來,我們為Employee class創建了一個object emp1。 通過使用此對象emp1,我們訪問company variable和func_message()。

在倒數兩個statement中,我們使用attribute reference來訪問variable值和function結果。 藉由使用attribute reference,您可以印出variable值。 但是,Employee.func_message返回function object,但不返回實際的function結果。

class Employee:
    company = 'Tutorial Gateway'
 
    def func_message(self):
        print('Welcome to Python Programming')
 
emp = Employee()
print(emp.company)
emp.func_message()
 
print("-------------")
print(Employee.company)
print(Employee.func_message)

Python __init() function
默認情況下,real-time的所有Python class都有__init __()函數。 使用此function可將值分配給object的property。 當您創建一個class的object時,它將自動呼叫__init __() function。 你不必另外呼叫它。

在這個例子中,我們在__init __() function中使用了簡單的print statement。 接下來,我們創建了一個Employee class的object。 如您所見,它直接印出訊息。

class Employee:
    company = 'Tutorial Gateway'

    def __init__(self):
        print('Hello World')
 
    def func_message(self):
        print('Welcome to Python Programming')
 
emp1 = Employee() # Created an Instance
 
print(emp1.company)
emp1.func_message()

在這個範例中,我們將使用__init __() function去將值添加到class中的property。 在這裡,我們在function中使用了名稱,年齡,性別,並在下一行中分配了這些值。 這意味著,當您employee class的object時,您必須提供名稱,年齡和性別(同時創建object本身)。

例如,如果創建一個沒有參數值的對象emp1 = Employee(),則會引發錯誤。 TypeError:__ init __()缺少3個必需的位置參數:'name','age'和'gender'

class Employee:
    company = 'Tutorial Gateway'
 
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender
 
    def func_message(self):
        print('Welcome to Python Programming')
 
emp1 = Employee('Mike', 25, 'Male') 

print(emp1.company)
emp1.func_message()
print(emp1.name)
print(emp1.age)
print(emp1.gender)

從上面的Python class範例中,可能會讓您混淆宣告參數,因為我們一直使用相同的名稱:name,age,gender。 但是,並非強制要求使用,但最佳做法是這樣做。

在這個例子中,我們使用n,a,gen作為__init__參數,名稱,年齡,性別作為self initialisation。

class Employee:
    company = 'Tutorial Gateway'

    def __init__(self, n, a, gen):
        self.name = n
        self.age = a
        self.gender = gen

    def func_message(self):
        print('Welcome to Python Programming')

emp1 = Employee('Johnson', 29, 'Male')
 
print(emp1.company)
emp1.func_message()
print(emp1.name)
print(emp1.age)
print(emp1.gender)

Multiple class Objects in Python
當您創建一個class的object或instance時,它將保存該class的copy而不是實際的class。 這意味著,您可以從單獨的class創建n個object,並且每個object可能具有不同的property值或method值。

在這個Python類範例中,我們創建了一個Employee class。 接下來,我們從該員工類創建了兩個object emp1和emp2。 如您所見,每個instance都有不同的名稱,年齡和性別。 接下來,我們將這些值印為輸出。

class Employee:
    company = 'Tutorial Gateway'

    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender
 
    def func_message(self):
        print('Welcome to Python Programming')
 
emp1 = Employee('Mike', 25, 'Male')
print(emp1.company)
emp1.func_message()
print(emp1.name)
print(emp1.age)
print(emp1.gender)
 
print()
emp2 = Employee('Tracy', 27, 'Female')
print(emp2.company)
emp2.func_message()
print(emp2.name)
print(emp2.age)
print(emp2.gender)

該範例與上面相同。 但是,這次我們修改了func_message(self) function定義。 它接受名稱(instance variable)並附加到輸出訊息。

class Employee:
    company = 'Tutorial Gateway'

    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender
 
    def func_message(self):
        print(self.name + ' is learning Python Programming')
 
emp1 = Employee('Mike', 25, 'Male')
print(emp1.company)
print(emp1.name) # Mike
print(emp1.age) #25
print(emp1.gender)
emp1.func_message()
 
print()
emp2 = Employee('Tracy', 27, 'Female')
print(emp2.company)
print(emp2.name) #Tracy
print(emp2.age) # 27
print(emp2.gender)
emp2.func_message()

正如您所看到的,emp1.func_message()將self.name替換為Mike,emp2.func_message()將自己替換為Tracy。

Modifying the Python Class Variable
在這個例子中,我們將向您展示如何使用class Objects修改class variable。 首先,我們宣告了一個company variable,以及印出歡迎訊息的function。 接下來,我們創建了Employee class的三個instance emp1,emp2和emp3。

接下來,我們使用Object_name.Variabel_name = New_Name來更改emp2和emp3 objects的company名稱。 這將更改這兩個instance的company名稱。 接下來,我們將從所有這三個instance中印出company variable。

class Employee:
    company = 'Tutorial Gateway'
 
    def func_message(self):
        print('Welcome to Python Programming')
 
emp1 = Employee()
emp2 = Employee()
emp3 = Employee()
 
emp2.company = 'Python'
emp3.company = 'Apple'
 
emp1.func_message()
 
print(emp1.company)
print(emp2.company)
print(emp3.company)
print(emp1.company)

Modify Python Object Properties
此範例顯示如何修改Python object property。 首先,我們使用創建了Employee class的instance emp1。 接下來,我們將值輸出。

這裡,emp1.name ='John'(object_name.property_name = New_Value)statement將現有的emp1名稱(Mike)更新為John。

class Employee:
    company = 'Tutorial Gateway'

    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender
 
    def func_message(self):
        print(self.name + ' is learning Python Programming')

emp1 = Employee('Mike', 25, 'Male')
print(emp1.name)
print(emp1.age)
print(emp1.gender)
emp1.func_message()
 
emp1.name = 'John'
print(emp1.name)
emp1.func_message()

您可以看到倒數兩個statement印出新名稱John。

Delete Python Object Properties
在這個Python class object範例中,我們將向您展示如何刪除object property。 為此,我們使用與上面相同的class。

這裡,emp1 = Employee('John',25,'Male')為Employee class創建一個instance emp1。 接下來,我們將從func_message() method印出名稱,年齡,性別和訊息。

接下來,我們使用del關鍵字刪除名為name(del instance_name.property_name)的emp1 object property。 在最後一個statement中,我們再次印出了我們刪除的emp1 object的name property。 如您所見,它顯示錯誤'Employee' object沒有attribute 'name'。 這意味著,我們成功刪除了object property。 同樣,您可以通過del emp1.gender刪除gender以及del emp1.age刪除年齡。

class Employee:
    company = 'Tutorial Gateway'
 
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender
 
    def func_message(self):
        print(self.name + ' is learning Python Programming')
 
emp1 = Employee('John', 25, 'Male')
print(emp1.name)
print(emp1.age)
print(emp1.gender)
emp1.func_message()
 
del emp1.name 
print(emp1.name)

請記住,刪除instance property不會影響其他instance property。 這個Python class範例與上面相同。 但是,這次我們為Employee class創建了兩個Instance emp1和emp2。 接下來,我們使用del關鍵字刪除了emp1 object的name property。 接下來,我們印出emp2 instance和emp1 instance的名稱。

emp2.name將名稱返回為Nancy,但是emp1.name因為我們刪除它而拋出錯誤。

class Employee:
    company = 'Tutorial Gateway'
 
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender
 
    def func_message(self):
        print(self.name + ' is learning Python Programming')
 
emp1 = Employee('John', 25, 'Male')
emp2 = Employee('Nancy', 27, 'Female')
print(emp1.name)
print(emp1.age)
print(emp1.gender)
emp1.func_message()
 
del emp1.name
print(emp2.name)
print(emp1.name)

Delete Python Class Object
在這個例子中,我們使用的是我們在前面的例子中定義的相同class。 在這裡,首先我們創建一個Employee class的object,並顯示func_message() method中的employee姓名,年齡,性別和訊息。

接下來,我們使用del關鍵字刪除class object emp1(del Object_name)。 這將刪除我們之前創建的instance emp1。 在最後一個statement中,我們使用emp1 object呼叫func_message() method來檢查object是否仍然存在。 你可以從結果看到,它拋出的錯誤名稱'emp1'未定義。 這意味著,我們通過del statement刪除了emp1 object。

class Employee:
    company = 'Tutorial Gateway'
 
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender
 
    def func_message(self):
        print(self.name + ' is learning Python Programming')
 
emp1 = Employee('John', 25, 'Male')
print(emp1.name)
print(emp1.age)
print(emp1.gender)
emp1.func_message()
 
del emp1
emp1.func_message()

Options for Creating Python class
在這個例子中,我們將向您展示在python中創建class的不同方法。 從下面的代碼中可以看出,您可以使用class_name,或class_name()或class_name(object)。

如果您仔細觀察object的生成,我們使用相同的方法為這三個class創建object。

class Employee:
    def __init__(self):
        print('Msg from Employee : Welcome to Tutorial Gateway')
 
class Student():
    def __init__(self):
        print('Msg from Student: Hello World!')
 
class Person(object):
    def __init__(self):
        print('Msg from Person: Welcome to Python Programming')
         
emp = Employee()

std = Student()

per = Person()

Python class self parameter
Python self參數注意到了對class的當前instance的reference。 我們必須使用這個self參數作為第一個參數,這有助於我們訪問屬於該class的variable。

如果你不喜歡關鍵字self,那麼你可以使用任何單字作為self parameter。 但是,它必須是第一個參數。 在這個Python class範例中,我們在第三個method function_msg中使用了suresh而不是self

class Employee:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def func_message(self):
        print(self.name + ' is learning Python Programming')
 
    def func_msg(suresh):
        print('Tutorial Gateway Welcome ' + suresh.name)
 
emp1 = Employee('John', 25)
emp1.func_message()
emp1.func_msg()



參考
https://www.tutorialgateway.org/python-class/













沒有留言:

張貼留言