類中定義的函式(沒有被任何裝飾器裝飾的),其實主要是給物件使用的,而且是繫結到物件的,雖然所有物件指向的都是相同的功能,但是繫結到不同的物件就是不同的繫結方法
強調:繫結到物件的方法的特殊之處在於,繫結給誰就由誰來呼叫,誰來呼叫,就會將『誰』本身當做第乙個引數傳給方法,即自動傳值(方法__init__也是一樣的道理)
class student():
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
# 繫結給物件的方法,物件來呼叫,會把自己當成第乙個引數傳到函式裡面self
def tell_info(self):
print('name: %s,age:%s, gender:%s' % (self.name, self.age, self.gender))
stu = student('tony', 18, 'male')
# print(stu.name)
stu.tell_info() # stu.tell_info(stu)
class mysql():
def __init__(self, ip, port):
self.ip = ip
self.port = port
@classmethod # 該方法繫結給類了,以後有類來呼叫,會自動把類名當成第乙個引數傳過來,cls
def from_conf(cls):
# cls => oracle
# obj = oracle(settings.ip, settings.port)
obj = cls(settings.ip, settings.port)
return obj
mysql.from_conf()
在類內部用staticmethod裝飾的函式即非繫結方法,就是普通函式
statimethod不與類或物件繫結,誰都可以呼叫,沒有自動傳值效果
# 既不繫結給類,也不繫結給物件
class student():
school = 'sh'
def __init__(self, name, age):
self.name = name
self.age = age
@staticmethod # 靜態方法
def create_id():
import uuid
return uuid.uuid4()
stu = student('ly', 18)
# print(stu.create_id())
# print(student.create_id())
print(stu.create_id())
在python中用雙下劃線開頭的方式將屬性隱藏起來(設定成私有的)
* 其實這僅僅這是一種變形操作且僅僅只在類定義階段發生變形
* 類中所有雙下劃線開頭的名稱如__x都會在類定義時自動變形成:_類名__x的形式
* 只有在類定義階段發生變形,其他情況都不發生變形了
'''
為什麼要隱藏: 類裡面的隱藏屬性, 類外部可以使用,但是目的不是讓類外部使用的,類外部要是想用,在類內部開放介面進行訪問
可以達到對外部資料的嚴格控制
'''class student():
__school = 'sh' # _student__school => _類名__屬性名
def __init__(self, name, age):
self.__name = name
self.age = age
def __tell_info(self): # _student__tell_info => _類名__函式名
print('name: %s, age: %s' % (self.__name, self.age))
def get_school(self):
return self.__school # self._student__school
def set_school(self, v):
if type(v) is not str:
print('資料型別不合法')
# if isinstance(v, str):
return
self.__school = v
什麼是特性property
property是一種特殊的屬性,訪問它時會執行一段功能(函式)然後返回值
為什麼要用property
將乙個類的函式定義成特性以後,物件再去使用的時候obj.name,根本無法察覺自己的name是執行了乙個函式然後計算出來的,這種特性的使用方式遵循了統一訪問的原則
class student():
__school = 'sh' # _student__school => _類名__屬性名
def __init__(self, name, age):
self.__name = name
self.age = age
def __tell_info(self): # _student__tell_info => _類名__函式名
print('name: %s, age: %s' % (self.__name, self.age))
@property # 把方法偽裝成屬性
def name(self):
return "name:%s" % self.__name
stu = student('tony', 18)
print(stu.get_name())
stu.name = 123
print(stu.name)
del stu.name
Python類繫結方法及非繫結方法例項解析
一 繫結方法 1.物件的繫結方法 首先我們明確乙個知識點,凡是類中的方法或函式,預設情況下都是繫結給物件使用的。下面,我們通過例項,來慢慢解析繫結方法的應用。class people def init self,name,age self.name name self.age age def tal...
SerialPort類的常用屬性及方法
分類 排隊叫號 vb.net 2011 04 05 21 17 36人閱讀收藏 舉報 一 serialport類的常用屬性 名 稱 說 明 basestream 獲取 serialport 物件的基礎 stream 物件 baudrate 獲取或設定序列波特率 breakstate 獲取或設定中斷訊...
python類的繫結方法與非繫結方法
一 繫結方法 首先我們明確乙個知識點,凡是類中的方法或函式,預設情況下都是繫結給物件使用的。下面,我們通過例項,來慢慢解析繫結方法的應用。class people def init self,name,age self.name name self.age age deftalk self pass...