# 定義類
class car:
# 方法
def getcarinfo(self):
print('車輪子個數:%d, 顏色%s'%(self.wheelnum, self.color))
def move(self):
print("車正在移動...")
#!/usr/bin/python
# -*- coding: utf-8 -*-
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
# 定義類
class car:
# 移動
def move(self):
print('車在奔跑...')
# 鳴笛
def toot(self):
print("車在鳴笛...嘟嘟..")
# 建立乙個物件,並用變數bmw來儲存它的引用
bmw = car()
bmw.color = '黑色'
bmw.wheelnum = 4 #輪子數量
bmw.move()
bmw.toot()
print(bmw.color)
print(bmw.wheelnum)
類的方法與普通的函式只有乙個特別的區別——它們必須有乙個額外的第乙個引數名稱, 按照慣例它的名稱是 self。
class test:
def prt(self):
print(self)
print(self.__class__)
t = test()
t.prt()
可以使用點號 . 來訪問物件的屬性
#!/usr/bin/python
# -*- coding: utf-8 -*-
#!/usr/bin/python3
#類定義
class people:
#定義基本屬性
name = ''
age = 0
#定義私有屬性,私有屬性在類外部無法直接進行訪問
__weight = 0
#定義構造方法
def __init__(self,n,a,w):
self.name = n
self.age = a
self.__weight = w
def speak(self):
print("%s 說: 我 %d 歲。" %(self.name,self.age))
init: 建構函式,在生成物件時呼叫self 的名字並不是規定死的,也可以使用 this,但是最好還是按照約定是用 self。del: 析構函式,釋放物件時使用
repr: 列印,轉換
setitem: 按照索引賦值
getitem: 按照索引獲取值
len: 獲得長度
cmp: 比較運算
call: 函式呼叫
add: 加運算
sub: 減運算
mul: 乘運算
truediv: 除運算
mod: 求餘運算
pow: 乘方
#!/usr/bin/python3
class justcounter:
__secretcount = 0 # 私有變數
publiccount = 0 # 公開變數
def count(self):
self.__secretcount += 1
self.publiccount += 1
print (self.__secretcount)
counter = justcounter()
counter.count()
counter.count()
print (counter.publiccount)
print (counter.__secretcount) # 報錯,例項不能訪問私有變數
#!/usr/bin/python3
class site:
def __init__(self, name, url):
self.name = name # public
self.__url = url # private
def who(self):
print('name : ', self.name)
print('url : ', self.__url)
def __foo(self): # 私有方法
print('這是私有方法')
def foo(self): # 公共方法
print('這是公共方法')
self.__foo()
x = site('菜鳥教程', 'www.runoob.com')
x.who() # 正常輸出
x.foo() # 正常輸出
x.__foo() # 報錯
使用@staticmethod或@classmethod,就可以不需要例項化,直接類名.方法名()來呼叫。
是類物件所擁有的方法,需要用修飾器@classmethod來標識其為類方法,對於類方法,第乙個引數必須是類物件,一般以cls作為第乙個引數(當然可以用其他名稱的變數作為其第乙個引數,但是大部分人都習慣以』cls』作為第乙個引數的名字,就最好用』cls』了),能夠通過例項物件和類物件去訪問。
class people(object):
country = 'china'
#類方法,用classmethod來進行修飾
@classmethod
def getcountry(cls):
return cls.country
p = people()
print (p.getcountry() ) #可以用過例項物件引用
print (people.getcountry()) #可以通過類物件引用類方法還有乙個用途就是可以對類屬性進行修改:
class people(object):
country = 'china'
#類方法,用classmethod來進行修飾
@classmethod
def getcountry(cls):
return cls.country
@classmethod
def setcountry(cls,country):
cls.country = country
p = people()
print (p.getcountry() ) #可以用過例項物件引用
print (people.getcountry() ) #可以通過類物件引用
p.setcountry('japan')
print (p.getcountry() )
print (people.getcountry())
需要通過修飾器@staticmethod來進行修飾,靜態方法不需要多定義引數
class people(object):
country = 'china'
@staticmethod
#靜態方法
def getcountry():
return people.country
print (people.getcountry())
從類方法和例項方法以及靜態方法的定義形式就可以看出來,類方法的第乙個引數是類物件cls,那麼通過cls引用的必定是類物件的屬性和方法;而例項方法的第乙個引數是例項物件self,那麼通過self引用的可能是類屬性、也有可能是例項屬性(這個需要具體分析),不過在存在相同名稱的類屬性和例項屬性的情況下,例項屬性優先順序更高。靜態方法中不需要額外定義引數,因此在靜態方法中引用類屬性的話,必須通過類物件來引用 python3之物件導向 屬性
物件導向程式設計中屬性有 成員屬性 類屬性 例項屬性。成員屬性 在類的初始化方法中繫結的屬性 類屬性 歸所在類所有,但該類和該類的所有例項都可以訪問到 例項屬性 在例項化物件時對當前物件增加的屬性,只有該物件可以訪問。class person person類 num 20 類屬性 def init ...
Python3學習筆記之物件導向高階程式設計
使用 property 在前面我們已經知道可以給類的例項繫結任何變數,而實際上作為動態語言的特點,不僅可以繫結變數,還可以給例項繫結方法,具體做法為 class student object pass.s student defset age self,age self.age age.from t...
Python高階之物件導向概念
2 物件 3.類和物件之間的關係 4.類的設計 物件導向程式設計 英語 object oriented programming,縮寫 oop 是一種程式設計理念,這種程式設計理念更符合我們人的邏輯思維。使用物件導向程式設計可以提高我們的開發速度和 的重用率。物件導向的開發非常適合大型程式開發,開發速...