Python學習筆記五 物件導向 類 方法 屬性

2021-08-29 16:51:06 字數 3332 閱讀 4750

這裡所列的都是從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 ...