這裡所列的都是從c#的角度來看的,可能覺得不是很恰當。但是對於抽象的概念,更方便理解。
函式的定義
class
python中的類沒有什麼public、private、protect
建構函式、析構函式
__init__(self)
__del__(self)
類的靜態變數
class student
name="abc"
這東西其實就是相當於c#中的靜態變數,但這裡要注意是,初始化類的靜態變數是這樣的(diveintopython中的例子)
class counter:
count = 0
def __init__(self):
self.__class__.count += 1
例項的成員變數
class student
def __init__(self)
self.name = "abc"
屬性定義(類從object繼承,但好像不是必須的,因為下面的**也可以正常使用)
class student:
def __init__(self):
self.__name="abc"
def getname(self):
return self.__name
def setname(self,value):
self.__name = value
def delname(self):
del self.__name
name = property(getname,setname,delname,'student name')
說實話,當我寫完這段**的時候,我就不想使用屬性了。這樣定義起來也太不方便了,還要從object中繼承。而且現在c#中,可以很簡單的通過get、set來實現屬性了。目前沒有找到好的理由使用屬性
唯讀屬性(類必須從object繼承,否則就不是唯讀的)
class parrot(object):
def __init__(self):
self._voltage = 100000
@property
def voltage(self):
"""get the current voltage."""
return self._voltage
私有變數
class student:
def __init__(self):
self.__name="abc"
很簡單就是通過__ 兩個下劃線開頭,但不是結尾的。就是私有了
私有方法
class student:
def __getage(self):
pass
和私有的變數一樣,你可以嘗試一下直接呼叫,編譯器會有相應的提示
強制訪問私有方法、變數
"私有"事實上這只是一種規則,我們依然可以用特殊的語法來訪問私有成員。
上面的方法,我們就可以通過_類名來訪問
aobj = student()
aobj._student__name
aobj._student__getage()
靜態方法
class class1:
@staticmethod
def test():
print "in static method..."
方法過載
python是不支援方法過載,但是你**了可以寫。python會使用位置在最後的乙個。我覺得這可能以python儲存這些資訊通過__dict__ 有關,它就是乙個dict。key是不能相同的。所以也就沒辦法出現兩個gogo 方法呼叫
class student:
def gogo(self,name):
print name
def gogo(self):
print "default"
呼叫的時候你只能使用 obj.gogo()這個方法。
一些特殊方法
__init__(self) 建構函式
__del__ (self) 析構函式
__repr__( self) repr()
__str__( self) print語句 或 str()
運算子過載
__lt__( self, other)
__le__( self, other)
__eq__( self, other)
__ne__( self, other)
__gt__( self, other)
__ge__( self, other)
這東西太多了。大家還是自己看python自帶幫助吧。
一些特殊屬性
當你定義乙個類和呼叫類的例項時可以獲得的一些預設屬性
class student:
'''this test class'''
name = 'ss'
def __init__(self):
self.name='bb'
def run(self):
'''people run'''
@staticmethod
def runstatic():
print "in static method..."
print student.__dict__ #類的成員資訊
print student.__doc__ #類的說明
print student.__name__ #類的名稱
print student.__module__ #類所在的模組
print student.__bases__ #類的繼承資訊
obj = student()
print dir(obj)
print obj.__dict__ #例項的成員變數資訊(不太理解python的這個模型,為什麼run這個函式確不再dict中)
print obj.__doc__ #例項的說明
print obj.__module__ #例項所在的模組
print obj.__class__ #例項所在的類名
php學習之五(物件導向)
在物件導向的程式設計 英語 object oriented programming,縮寫 oop 中,物件是乙個由資訊及對資訊進行處理的描述所組成的整體,是對現實世界的抽象。變數 this代表自身的物件。php eol為換行符.類屬性必須定義為公有,受保護,私有之一。如果用 var 定義,則被視為公...
php基礎(五)物件導向
面象對向的三大特點 封裝性 繼承性 多型性 首先簡單理解一下抽象 我們在前面定義乙個類的時候,實際上就是把一類事物共有的屬性和行為提取出來,形成乙個物理模型 模版 這種研究問題的方法稱為抽象 一 封裝性 封裝就是把抽取出來的資料和對資料的操作封裝在一起,資料被保護在內部,程式的其他部分只有被授權的操...
五 物件導向(二) 繼承與重寫
1 import 模組名 常規匯入,直接匯入整個包的所有的功能函式。import math import os import sys 以上可簡寫為 import math,os,sys2 from import 語句把乙個模組的所有內容全都匯入到當前的命名空間也是可行的,只需使用如下宣告 from ...