9 繫結方法與非繫結方法

2021-09-26 23:30:32 字數 1676 閱讀 1171

非繫結方法

繫結方法

1.繫結給類的方法(classmethod)

@classmethod是乙個裝飾器,起作用就是宣告下面的函式是繫結給類的,可用 類.函式名 來進行呼叫即繫結到類。類在使用時會將類本身當做引數傳給類方法的第乙個引數(即便是物件來呼叫也會將類當作第乙個引數傳入),python為我們內建了函式classmethod來把類中的函式定義成類方法。

#settings.py

# host='127.0.0.1'

# port=3306

# db_path=r'c:\users\administrator\pycharmprojects\test\物件導向程式設計\test1\db'

import settings

class mysql:

def __init__(self,host,port):

self.host=host

self.port=port

@classmethod

def from_conf(cls):

print(cls)

return cls(settings.host,settings.port)

print(mysql.from_conf) #>

mysql=mysql.from_conf() #將settings中內容作為引數,傳入類mysql中 ,相等於執行from_conf(mysql)

print(mysql.host and mysql.port)

>

# # 3306

2.繫結到物件的方法:沒有被任何裝飾器裝飾的方法。

就是在例項化物件後,直接呼叫類中的函式和屬性

非繫結方法

非繫結方法:用@staticmethod裝飾器裝飾的方法。statimethod不與類或物件繫結,誰都可以呼叫,沒有自動傳值效果。

注意:與繫結到物件方法區分開,在類中直接定義的函式,沒有被任何裝飾器裝飾的,都是繫結到物件的方法,可不是普通函式,物件呼叫該方法會自動傳值,而staticmethod裝飾的方法,不管誰來呼叫,都沒有自動傳值一說。

import hashlib

import time

class mysql :

def __init__(self,host,post):

self.host=host

self.post=post

self.id=self.create_id()

@staticmethod

def create_id():

m=hashlib.md5(str(time.time()).encode('utf-8'))

return m.hexdigest()

mysql=mysql('127.1.1.0',3308)

print(mysql.create_id())

print(mysql.create_id())

print(mysql.id)

# eace12deda949739c083c113981e0873

# eace12deda949739c083c113981e0873

# eace12deda949739c083c113981e0873

繫結方法與非繫結方法

特性 繫結給誰就應該由誰來呼叫,誰來呼叫就會將誰當作第乙個引數自動傳入 精髓在於自動傳值 繫結方法分為兩類 1.1 繫結給物件方法 在類內部定義的函式 沒有被任何裝飾器修飾的 預設就是繫結給物件用的 1.2 繫結給類的方法 在類內部定義的函式如果被裝飾器 classmethod裝飾,那麼則是繫結給類...

封裝,繫結方法與非繫結方法

一 封裝 1,什麼是封裝 封 屬性對外是隱藏的,但對內是開放的 裝 申請乙個命名空間,往裡面填入一系列名字 屬性 2,為什麼要封裝?封裝資料屬性的目的 首先定義屬性的目的就是為了給類外部的使用的,隱藏之後是為了不讓外部直接使用,需要類內部開闢乙個介面。然後讓類外部的使用通過介面來間接地操作隱藏的屬性...

繫結方法與非繫結方法,反射,內建方法

類中定義函式分為了兩大類 1.繫結方法 特殊之處 繫結給誰就應該由誰來呼叫,誰來呼叫就會將誰當作第乙個引數自動傳入 繫結給物件的方法 在類中定義函式沒有被任何裝飾器的情況下,預設就是繫結物件的 繫結給類的方法 為類中定義函式新增乙個裝飾器class method,就是繫結類的 2.非繫結方法 特殊之...