python語言程序設計,python中類的詳細介紹及使用

 2023-11-19 阅读 33 评论 0

摘要:? ? ? ? ? ? ? ? ? ? ? ? ?python中類的詳細介紹及使用 ? ? 前面我們介紹了類的創建及面向對象的三大特性。本篇將詳細介紹Python 類的成員、成員修飾符、類的特殊成員。 一、類的成員 ? ? 類的成員包括:屬性和方法。 ? ? 屬性可以分為:靜態屬性和實例屬性 pyth

? ? ? ? ? ? ? ? ? ? ? ? ?python中類的詳細介紹及使用

? ? 前面我們介紹了類的創建及面向對象的三大特性。本篇將詳細介紹Python 類的成員、成員修飾符、類的特殊成員。

一、類的成員

? ? 類的成員包括:屬性和方法。

? ? 屬性可以分為:靜態屬性和實例屬性

python語言程序設計?? ? 方法可以分為:普通方法、類方法和靜態方法。

? ??

1、類的屬性

? ? 屬性可以分為:靜態屬性和實例屬性。

? ? 實例屬性屬于對象,而靜態屬性屬于類。

python3.7?? ? 通過類創建對象時,如果每個對象都具有相同的屬性,那么就使用靜態屬性。

1.1、靜態屬性的創建方式

? ? 靜態屬性是屬于類的,所以不用創建對象訪問。

class Province:# 靜態字段country = '中國'# 直接訪問靜態字段
Province.country

例如:

1.2、實例屬性

lass Goods:def __init__(self):# 原價self.original_price = 100# 折扣self.discount = 0.8@propertydef price(self):# 實際價格 = 原價 * 折扣new_price = self.original_price * self.discountreturn new_price@price.setterdef price(self, value):self.original_price = value@price.deleterdef price(self):del self.original_price

? ? 例如:

python怎么用。? ? 實例屬性可以在構造方法中進行初始化。@property裝飾器可以把一個實例方法變成其同名屬性,以支持.號訪問。我們可以根據屬性的訪問特點,分別將三個方法定義為對同一個屬性:獲取、修改、刪除。

擴展:

? ? 對于靜態屬性還可以使用property函數的形式定義一個屬性。與@property實現原理類似。

? ? property(fget=None, fset=None, fdel=None, doc=None)

class Foo:def get_bar(self):return 'get_bar'# *必須兩個參數def set_bar(self, value): return 'set value' + valuedef del_bar(self):return 'del_bar'age = property(fget=get_bar,fset=set_bar,fdel=del_bar,doc='description...')

python和java、例如:?

2、類的方法

? ? 方法包括:普通方法、類方法和靜態方法。

? ??普通方法:由對象調用;至少一個self參數;執行普通方法時,自動將調用該方法的對象賦值給self

? ??類方法:由調用; 至少一個cls參數;執行類方法時,自動將調用該方法的復制給cls

python3?? ??靜態方法:由調用;無默認參數;

class Foo:def __init__(self, name):self.name = namedef ord_func(self):""" 定義普通方法,至少有一個self參數 """# print self.nameprint('普通方法')@classmethoddef class_func(cls):""" 定義類方法,至少有一個cls參數 """print('類方法')@staticmethoddef static_func():""" 定義靜態方法 ,無默認參數"""print('靜態方法')

例如:

? ??如果Python中沒有屬性,方法完全可以代替其功能。

二、類成員的修飾符

? ??對于每一個類的成員而言都有兩種形式:

python列表,? ??公有成員,在任何地方都能訪問。

? ? 私有成員,只有在類的內部才能方法。

? ??私有成員和公有成員的定義不同:私有成員命名時,前兩個字符是下劃線。(特殊成員除外,例如:__init__、__call__、__dict__等)

? ? ps:如果想要強制訪問私有字段,可以通過 【對象._類名__私有字段明 】訪問(如:obj._C__foo),不建議強制訪問私有成員。

class C:name = '公有靜態字段'__sname ='私有靜態字段'def pub_func(self):print(C.name)def pra_func(self):print(C._sname)class D(C):def pub_show(self):print(C.name)def pra_show(self):print(C._sname)

Python中的類。例如:

? ? ?注:不建議強制訪問私有成員。

三、類的特殊成員

1、__doc__

? ??表示類的描述信息。

>>> class Foo:""" 描述類信息,這是用于看片的神奇 """def func(self):pass>>> Foo.__doc__
' 描述類信息,這是用于看片的神奇 '

2、?__module__ 和 ?__class__

???__module__ 表示當前操作的對象在哪個模塊

python爬蟲教程。? ?__class__ ? ? 表示當前操作的對象的類是什么

>>> class Foo:""" 描述類信息,這是用于看片的神奇 """def func(self):pass
>>> obj = Foo()
>>> obj.__module__
'__main__'
>>> obj.__class__
<class '__main__.Foo'>

3、__init__

? ??構造方法,通過類創建對象時,自動觸發執行。

>>> class Foo:def __init__(self, name):self.name = nameself.age = 18>>> obj = Foo('test')
>>> obj.name
'test'

4、?__del__

? ??當對象在內存中被釋放時,自動觸發執行。

5.?__call__

? ??對象后面加括號,觸發執行。

>>> class Foo:def __init__(self):passdef __call__(self, *args, **kwargs):print('__call__')>>> obj = Foo()
>>> obj()
__call__

6.?__dict__

在python中、? ??類或對象中的所有成員。

>>> class Province:country = 'China'def __init__(self, name, count):self.name = nameself.count = countdef func(self, *args, **kwargs):print('func')
>>> print(Province.__dict__) # 獲取類的成員,即:靜態字段、方法
{'__module__': '__main__', 'country': 'China', '__init__': <function Province.__init__ at 0x0000000002F39820>, 'func': <function Province.func at 0x0000000002F398B0>, '__dict__': <attribute '__dict__' of 'Province' objects>, '__weakref__': <attribute '__weakref__' of 'Province' objects>, '__doc__': None}
>>> obj1 = Province('jiangxi',10000)
>>> print(obj1.__dict__) #獲取 對象obj1 的成員
{'name': 'jiangxi', 'count': 10000}

7.?__str__

? ??如果一個類中定義了__str__方法,那么在打印 對象 時,默認輸出該方法的返回值。有點像java中的toString方法。

>>> class Foo:def __str__(self):return 'test'>>> obj = Foo()
>>> print(obj)
test

8、__getitem__、__setitem__、__delitem__

? ??用于索引操作,如字典。以上分別表示獲取、設置、刪除數據。

9、__getslice__、__setslice__、__delslice__

? ??三個方法用于分片操作。

10. __iter__

python編程?? ??用于迭代器,之所以列表、字典、元組可以進行for循環,是因為類型內部定義了 __iter__。

>>> class Foo(object):def __init__(self, sq):self.sq = sqdef __iter__(self):return iter(self.sq)
>>> for i in obj:print(i)
11
22
33
44
>>> 

?

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/184345.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息