python——類(一)
1〉首先,怎麼寫一個類,用個例子
class Student(object): def __init__(self,name,score,gender): self.__name=name self.__score=score self.__gender=gender def get_name(self): return self.__name def print_score(self): print('%s:%s'%(self.__name,self.__score)) def set_score(self,score): if 0<=score<=100: self.__score=score else: raise ValueError('bad score') def get_grade(self): if self.__score>=90: return 'A' elif self.__score>=60: return 'B' else: return 'C' def get_gender(self): if self.__gender=='男': return 'man' elif self.__gender=='女': return 'woman'
需要注意的點:
類名後面的(object)是可以忽略的。(只有當子類繼承父類的時候,類名後面的括號裡面是父類的名字,下面會有例子)
def __init__(self){}這個類似建構函式,init前後分別有兩個下劃線,一共有四個下劃線,括號裡面的self是必寫的一個,但是不會用到它(我個人的理解是this,僅僅個人認為)
特別注意get和set方法,和jsp中的方法也類似。
2〉以上僅僅是一個類,下面講講類的繼承和多型:
class Animal(object): def run(self): print('Animal is running...') class Dog(Animal): def run(self): print('Dog is running...') class Cat(Animal): def run(self): print('Cat is running...') def run_twice(animal): animal.run()
如上程式碼中Animal是父類,Dog和Cat都是Animal的子類,通過在類名後面+(父類的類名)實現
def run_twice(animal):
animal.run()
其中,這個函式是實現多型的
>>> run_twice(Animal())
Animal is running...
>>> run_twice(Dog())
Dog is running...
這個是 呼叫的結果
3〉瞭解類屬性和例項屬性:簡單的說 類屬性是在類中直接寫的屬性,例項屬性指在類外重寫的屬性。一般,先看有沒有例項屬性,再看有沒有類屬性。
>>> coke_a.drink()class CocaCola(object): calories=140 sodium=45 total_carb=39 caffeine=34 def __init__(self,logo_name): self.logo_name=logo_name def drink(self): print('You got{}cal energy!'.format(self.calories)) class zeroCola(CocaCola): calories=0
You got0cal energy!
子類會覆蓋父類中相同的屬性的值。
4〉認識除了__init__之外的內建函式
class Employee:
'所有員工的基類'
empCount=0
def __init__(self,name,salary):
self.name=name
self.salary=salary
Employee.empCount+=1
def displayCount(self):
print ("Total Employee %d"% Employee.empCount)
def displayEmployee(self):
print("Name:",self.name,"Salary:",self.salary)
print("Employee.__doc__:",Employee.__doc__)
print("Employee.__name__:",Employee.__name__)
print("Employee.__module__:",Employee.__module__)
print("Employee.__bases__:",Employee.__bases__)
print("Employee.__dict__:",Employee.__dict__)
結果如下:
Employee.__doc__: 所有員工的基類
Employee.__name__: Employee
Employee.__module__: __main__
Employee.__bases__: (<class 'object'>,)
Employee.__dict__: {'__weakref__': <attribute '__weakref__' of 'Employee' objects>, 'displayCount': <function Employee.displayCount at 0x0000000003570F28>, '__dict__': <attribute '__dict__' of 'Employee' objects>, '__module__': '__main__', '__init__': <function Employee.__init__ at 0x0000000003570EA0>, 'empCount': 0, 'displayEmployee': <function Employee.displayEmployee at 0x0000000003565048>, '__doc__': '所有員工的基類'}
#****************************************************************************
除此之外,我還找到一些
類的專有方法:
- __init__ : 建構函式,在生成物件時呼叫
- __del__ : 解構函式,釋放物件時使用
- __repr__ : 列印,轉換
- __setitem__ : 按照索引賦值
- __getitem__: 按照索引獲取值
- __len__: 獲得長度
- __cmp__: 比較運算
- __call__: 函式呼叫
- __add__: 加運算
- __sub__: 減運算
- __mul__: 乘運算
- __div__: 除運算
- __mod__: 求餘運算
- __pow__: 乘方