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

2021-08-29 23:00:47 字數 3578 閱讀 5359

類中定義函式分為了兩大類:

1.繫結方法

特殊之處:繫結給誰就應該由誰來呼叫,誰來呼叫就會將誰當作第乙個引數自動傳入

繫結給物件的方法:在類中定義函式沒有被任何裝飾器的情況下,預設就是繫結物件的

繫結給類的方法:為類中定義函式新增乙個裝飾器class method,就是繫結類的

2.非繫結方法

特殊之處:非繫結方法就是乙個普通函式,既不與繫結又不與物件繫結,意味著類與物件都可以呼叫,但是無論誰來呼叫都是乙個普通函式,沒有自動傳值效果

非繫結方法:為類中定義函式新增乙個裝飾器static method,就是非繫結方法

# class foo:

# def func1(self):

# print('func1',self)

## @classmethod

# def func2(cls):

# print('func2',cls)

## @staticmethod

# def func3(x,y):

# print('func3',x,y)

## obj=foo()

#一.繫結給物件的方法

# 繫結給物件的,應該由物件來調,

# obj.func1()

# print(obj)

# 繫結給物件的方法,類也可以呼叫,但是類呼叫就是乙個普通函式,沒有自動傳值的效果

# print(obj.func1)

# print(foo.func1)

# foo.func1(obj)

#二.繫結給類的方法

# 繫結給類的,應該由類來調,

# print(foo.func2)

# print(obj.func2)

# foo.func2()

# obj.func2()

#三.非繫結方法

# print(obj.func3)

# print(foo.func3)

# obj.func3(1,2)

# foo.func3(1,3)

import settings

class mysql:

def __init__(self,ip,port):

self.id=self.create_id()

self.ip=ip

self.port=port

def tell_info(self):

print('<%s:%s:%s>' % (self.id,self.ip, self.port))

@classmethod

def from_conf(cls):

return cls(settings.ip, settings.port)

@staticmethod

def create_id():

import uuid

return uuid.uuid4()

obj=mysql('1.1.1.1',3306)

# obj1=mysql('1.1.1.2',3406)

obj.tell_info()

# obj1.tell_info()

# obj2=mysql.from_conf()

# obj2.tell_info()

反射指的是通過字串來操作屬性

class foo:

def __init__(self,name,age):

self.name=name

self.age=age

def tell_info(self):

print('%s:%s' %(self.name,self.age))

obj=foo('egon',18)

#hasattr

# print(hasattr(obj,'name')) #obj.name

# print(hasattr(obj,'tell_info')) #obj.tell_info

#getattr

# res=getattr(obj,'name') #res=obj.name

# print(res)

# res=getattr(obj,'***',none)

# print(res)

#setattr

# setattr(obj,'age',38)

# setattr(obj,'***','male')

# print(obj.__dict__)

# print(obj.***)

#delattr

# delattr(obj,'name')

if hasattr(obj,'***xe'):

delattr(obj,'***xe')

# print(obj.__dict__)

# print(isinstance(,list)) #type() is list

# class foo:

# pass

# obj=foo()

# print(isinstance(obj,foo))

# issubclass()

# class foo:

# pass

## class bar(foo):

# pass

# print(issubclass(bar,foo))

# __str__: 會在物件被列印時自動觸發,然後將返回值返回給print功能進行列印

# class people:

# def __init__(self,name,age):

# self.name=name

# self.age=age

## def __str__(self):

# return '<%s:%s>' %(self.name,self.age)

## peo=people('egon',18)

# print(peo) #print(peo.__str__())

## l=list([1,2,3])

# print(l)

# __del__: 會在物件被刪除時自動觸發執行,用來在物件被刪除前**系統資源

# class foo:

# def __del__(self):

# print('===>')

## obj=foo()

# # del obj

# print('其他**...')

class bar:

def __init__(self,x,y,filepath):

self.x=x

self.y=y

self.f=open(filepath,'r',encoding='utf-8')

def __del__(self):

# 寫**系統資源相關的**

self.f.close()

obj=bar(10,20)

del obj

繫結方法與非繫結方法

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

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

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

9 繫結方法與非繫結方法

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