Python 面向对象编程:类的创建与初始化、实例属性与方法、类属性与方法
1. 類的創建并實例化
類的定義:在Python中,類通過 class 關鍵字定義。按照 Python 的編程習慣,類名以大寫字母開頭,緊接著是(object),表示該類是從哪個類繼承下來的。下面是一個簡單的類創建并實例化:
class Person(object):passsqz = Person()屬性賦值:由于Python是動態語言,對每一個實例,都可以直接給他們的屬性賦值:
sqz.name = 'Sunqz' sqz.age = 18屬性初始化:雖然我們可以自由地給一個實例綁定各種屬性,但是,現實世界中,一種類型的實例應該擁有相同名字的屬性。在定義 Person 類時,可以為Person類添加一個特殊的__init__()方法,當創建實例時,__init__()方法被自動調用,我們就能在此為每個實例都統一加上以下屬性:
class Person(object):def __init__(self, name, gender, birth, **kw):self.name = nameself.gender = genderself.birth = birthfor key, value in kw.items(): # **kw 表示接受任意長度參數,以字典形式存儲setattr(self, key, value) # 使用 setattr(self, name, ***) 設置屬性sqz = Person('Sun qz', 'Male', '1996-1-1', job='Student')print sqz.name print sqz.job屬性訪問限制:Python對屬性權限的控制是通過屬性名來實現的,如果一個屬性由雙下劃線開頭__**,該屬性就無法被外部訪問。
class Person(object):def __init__(self, name, score):self.name = nameself.__score = scorep = Person('Bob', 59)print p.name print p.__score # 報錯AttributeError: 'Person' object has no attribute '__score' Bob但是,如果一個屬性以"__xxx__“的形式定義,那它又可以被外部訪問了,以”__xxx__“定義的屬性在Python 的類中被稱為特殊屬性,有很多預定義的特殊屬性可以使用,通常我們不要把普通屬性用”__xxx__"定義。
以單下劃線開頭的屬性"_xxx"雖然也可以被外部訪問,但是,按照習慣,他們不應該被外部訪問。
創建類屬性:綁定在一個實例上的屬性不會影響其他實例,但是,類本身也是一個對象,如果在類上綁定一個屬性,則所有實例都可以訪問類的屬性,并且,所有實例訪問的類屬性都是同一個!也就是說,實例屬性每個實例各自擁有,互相獨立,而類屬性有且只有一份。
class Person(object):count = 0 # 類屬性def __init__(self, name):self.name = namePerson.count += 1 # 通過類名字調用類屬性并修改,所有實例進行訪問都是修改之后的值p1 = Person('Bob') print Person.count # 1 正常調用類屬性 print p1.count # 1 為實例創建了一個和類屬性同名的屬性 p1.count += 1 print p1.count # 2 修改實例屬性,對類屬性無影響,通過實例訪問同名屬性,優先訪問的是實例屬性 print Person.count # 1定義實例方法:實例的方法就是在類中定義的函數,它的第一個參數永遠是 self,指向調用該方法的實例本身,其他參數和一個普通函數是完全一樣。在實例方法內部,可以訪問所有實例屬性,這樣,如果外部需要訪問私有屬性,可以通過方法調用獲得,這種數據封裝的形式除了能保護內部數據一致性外,還可以簡化外部調用的難度。
class Person(object):def __init__(self, name, score):self.name = nameself.__score = score # 定義一個私有屬性,外部不可訪問def get_grade(self): # 通過函數訪問實例內部私有屬性if self.__score >= 90:return 'A' elif self.__score>=60:return 'B'else: return 'C'p1 = Person('Bob', 90) print p1.get_grade()定義類方法:和屬性類似,方法也分實例方法和類方法。
class Person(object):__count = 0 # 定義私有的類屬性@classmethoddef how_many(cls): # 定義類方法return cls.__countdef __init__(self, name):self.name = namePerson.__count = Person.__count + 1print Person.how_many() p1 = Person('Bob') print Person.how_many()通過標記一個 @classmethod,該方法將綁定到 Person 類上,而非類的實例。類方法的第一個參數將傳入類本身,通常將參數名命名為 cls,上面的 cls.count 實際上相當于 Person.count。
總結
以上是生活随笔為你收集整理的Python 面向对象编程:类的创建与初始化、实例属性与方法、类属性与方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 炽蓝仙野摇篮怎么获得
- 下一篇: 谜底是电视机的谜语