類中定義函式分為了兩大類:
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為我們內建了...