類的繫結方法及隱藏屬性

2022-09-10 10:54:14 字數 3066 閱讀 3908

​ 類中定義的函式(沒有被任何裝飾器裝飾的),其實主要是給物件使用的,而且是繫結到物件的,雖然所有物件指向的都是相同的功能,但是繫結到不同的物件就是不同的繫結方法

​ 強調:繫結到物件的方法的特殊之處在於,繫結給誰就由誰來呼叫,誰來呼叫,就會將『誰』本身當做第乙個引數傳給方法,即自動傳值(方法__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...