亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python中關(guān)于面向?qū)ο笏接袑傩苑椒ǖ脑敿?xì)講解

 更新時(shí)間:2021年10月08日 15:09:47   作者:測(cè)試領(lǐng)頭羊  
在實(shí)際開發(fā)中,對(duì)象的某些屬性或方法可能只希望在對(duì)象的內(nèi)部被使用,而不希望在外部被訪問(wèn)到,私有屬性就是對(duì)象不希望公開的屬性,私有方法就是對(duì)象不希望公開的方法

1.私有屬性和私有方法

封裝的意義:
將屬性和方法放到一起做為一個(gè)整體,然后通過(guò)實(shí)例化對(duì)象來(lái)處理;
隱藏內(nèi)部實(shí)現(xiàn)細(xì)節(jié),只需要和對(duì)象及其屬性和方法交互就可以了;
對(duì)類的屬性和方法增加 訪問(wèn)權(quán)限控制。

私有權(quán)限:在屬性名和方法名 前面 加上兩個(gè)下劃線 __
類的私有屬性 和 私有方法,都不能通過(guò)對(duì)象直接訪問(wèn),但是可以在本類內(nèi)部訪問(wèn);
類的私有屬性 和 私有方法,都不會(huì)被子類繼承,子類也無(wú)法訪問(wèn);
私有屬性 和 私有方法 往往用來(lái)處理類的內(nèi)部事情,不通過(guò)對(duì)象處理,起到安全作用。

私有屬性:

class Person(object):
    def __init__(self,name,age):
        self.name=name
        self.__age=age

p=Person('fei',22)
print(p.name)
print(p.__age)

在這里插入圖片描述

私有方法:

class Person(object):
    def __init__(self,name,age):
        self.name=name
        self.__age=age
    def __pmethod(self):
        print('私有方法')

p=Person('fei',22)
print(p.name)
p.__pmethod() # 調(diào)用私有方法

在這里插入圖片描述

類部調(diào)用私有屬性和私有方法

class Person(object):
    def __init__(self,name,age):
        self.name=name
        self.__age=age

    def __pmethod(self):
        print('私有方法')

    def shuxing(self):
        return self.__age
    def method(self):
        return self.__pmethod()

p=Person('fei',22)
print(p.shuxing())
p.method() 

在這里插入圖片描述

子類不能繼承父類私有屬性和方法

class Person(object):
    def __init__(self,name,age):
        self.name=name
        self.__age=age
    def __pmethod(self):
        print('私有方法')
    def pme(self):
        print('66666')

class Animal(Person):
    pass
a=Animal('fei',22)
print(a.name)
print(a.__age)

在這里插入圖片描述

class Person(object):
    def __init__(self,name,age):
        self.name=name
        self.__age=age
    def __pmethod(self):
        print('私有方法')
    def pme(self):
        print('66666')

class Animal(Person):
    pass
a=Animal('fei',22)
a.pme()
a.__pmethod()

在這里插入圖片描述

1). 私有屬性,可以在類內(nèi)部通過(guò)self調(diào)用,但不能通過(guò)對(duì)象訪問(wèn)
2). 私有方法,可以在類內(nèi)部通過(guò)self調(diào)用,但不能通過(guò)對(duì)象訪問(wèn)
3). 對(duì)象不能訪問(wèn)私有權(quán)限的屬性和方法
4). 子類不能繼承父類私有權(quán)限的屬性和方法
5). Python中沒(méi)有像C++中 public 和 private, protected 這些關(guān)鍵字來(lái)區(qū)別公有屬性和私有屬性。
6). Python是以屬性命名方式來(lái)區(qū)分,如果在屬性和方法名前面加了2個(gè)下劃線'__',則表明該屬性和方法是私有權(quán)限,否則為公有權(quán)限。

2.修改私有屬性的值

class Person(object):
    def __init__(self):
        self.__age=24
    def set_age(self,age):
        self.__age=age
    def get_age(self):
        return self.__age

p=Person()
p.set_age(28)
print(p.get_age())

在這里插入圖片描述

現(xiàn)代軟件開發(fā)中,通常會(huì)定義get_xxx()方法和set_xxx()方法來(lái)獲取和修改私有屬性值
get_xxx()方法–>返回私有屬性的值
set_xxx()方法–>接收參數(shù),修改私有屬性的值
對(duì)象不能訪問(wèn)私有權(quán)限的屬性和方法,可以通過(guò)訪問(wèn)公有方法set_money()來(lái)修改私有屬性的值,可以通過(guò)訪問(wèn)公有方法get_money()來(lái)獲取私有屬性的值

3.類屬性和實(shí)例屬性

類屬性就是類對(duì)象所擁有的屬性,它被所有類對(duì)象的實(shí)例對(duì)象所共有,在內(nèi)存中只存在一個(gè)副本,這個(gè)和C++中類的靜態(tài)成員變量有點(diǎn)類似。對(duì)于公有的類屬性,可以通過(guò)類或者實(shí)例對(duì)象訪問(wèn)

實(shí)例屬性只能通過(guò)對(duì)象來(lái)調(diào)用,類不能調(diào)用

類屬性:

class People(object):
    name = 'Tom'  # 公有的類屬性
    __age = 12  # 私有的類屬性

p = People()

print(p.name)  # 正確
print(People.name)  # 正確
print(p.__age)  # 錯(cuò)誤,不能在類外通過(guò)實(shí)例對(duì)象訪問(wèn)私有的類屬性
print(People.__age) # 錯(cuò)誤,不能在類外通過(guò)類對(duì)象訪問(wèn)私有的類屬性

在這里插入圖片描述

可以通過(guò)類或者實(shí)例對(duì)象調(diào)用

實(shí)例屬性(對(duì)象屬性)

class People(object):
    address = '山東'  # 類屬性
    def __init__(self):
        self.name = 'xiaowang'  # 實(shí)例屬性
        self.age = 20  # 實(shí)例屬性
p = People()
p.age = 12  # 實(shí)例屬性
print(p.address)  # 正確
print(p.name)  # 正確
print(p.age)  # 正確
print(People.address)  # 正確
print(People.name)  # 錯(cuò)誤
print(People.age)  # 錯(cuò)誤

在這里插入圖片描述

可以通過(guò)實(shí)例化對(duì)象調(diào)用,類不能調(diào)用

通過(guò)實(shí)例(對(duì)象)去修改類屬性

class People(object):
    country = 'china' #類屬性
print(People.country)
p = People()
print(p.country)
p.country = 'japan'
print(p.country)  # 實(shí)例屬性會(huì)屏蔽掉同名的類屬性
print(People.country)
del p.country  # 刪除實(shí)例屬性
print(p.country)

在這里插入圖片描述

對(duì)象修改類屬性,只對(duì)本對(duì)象有效果,對(duì)別的
對(duì)象沒(méi)有影響

4.類方法和靜態(tài)方法

類方法:

類方法是類對(duì)象所擁有的方法,需要用修飾器@classmethod來(lái)標(biāo)識(shí)其為類方法,對(duì)于類方法,第一個(gè)參數(shù)必須是類對(duì)象,一般以cls作為第一個(gè)參數(shù)(當(dāng)然可以用其他名稱的變量作為其第一個(gè)參數(shù),但是大部分人都習(xí)慣以'cls'作為第一個(gè)參數(shù)的名字,就最好用'cls'了),能夠通過(guò)實(shí)例對(duì)象和類對(duì)象去訪問(wèn)。

class People(object):
    # 類屬性
    age =18
    #類方法,用classmethod來(lái)進(jìn)行修飾
    @classmethod
    def get_country(cls):
        return cls.age
p = People()
print(p.get_country())    #可以用過(guò)實(shí)例對(duì)象引用
print(People.get_country())    #可以通過(guò)類對(duì)象引用

在這里插入圖片描述

class People(object):
    # 類屬性
    age= 18
    #類方法,用classmethod來(lái)進(jìn)行修飾
    @classmethod
    def get_country(cls):
        return cls.age
    @classmethod
    def set_country(cls,age):
        cls.age = age
p = People()
print(p.get_country())   #可以用過(guò)實(shí)例對(duì)象訪問(wèn)
print(People.get_country())    #可以通過(guò)類訪問(wèn)
p.set_country(23)
print(p.get_country())
print(People.get_country())
p1 = People()
print(p1.get_country())

在這里插入圖片描述

結(jié)果顯示在用類方法對(duì)類屬性修改之后,通過(guò)類對(duì)象和實(shí)例對(duì)象訪問(wèn)都發(fā)生了改變(全部改變)

靜態(tài)方法:

需要通過(guò)修飾器@staticmethod來(lái)進(jìn)行修飾,靜態(tài)方法不需要多定義參數(shù),可以通過(guò)對(duì)象和類來(lái)訪問(wèn)。

class People(object):
    country = 'china'
    @staticmethod
    #靜態(tài)方法
    def get_country():
        return People.country
p = People()
# 通過(guò)對(duì)象訪問(wèn)靜態(tài)方法
print(p.get_country())
# 通過(guò)類訪問(wèn)靜態(tài)方法
print(People.get_country())

在這里插入圖片描述

靜態(tài)方法中不需要額外定義參數(shù),因此在靜態(tài)方法中引用類屬性的話,必須通過(guò)類實(shí)例對(duì)象來(lái)引用,調(diào)用靜態(tài)方法可以通過(guò)對(duì)象或者類調(diào)用

實(shí)例方法

實(shí)例方法中的第一個(gè)參數(shù)是self,只能通過(guò)對(duì)象來(lái)訪問(wèn)。

class People(object):
    def selfmethod(self):
        print("我是實(shí)例方法")
p = People()
p.selfmethod()
#People.selfmethod()    #報(bào)錯(cuò)

在這里插入圖片描述

實(shí)例方法中需要self參數(shù),因此調(diào)用實(shí)例方法只能通過(guò)實(shí)例對(duì)象調(diào)用 也可以通過(guò)類調(diào)用但是一般不這樣用

總結(jié):
類方法使用@classmethod裝飾,第一個(gè)參數(shù)為類(cls),調(diào)用時(shí)可以通過(guò)類的實(shí)例或者類本身來(lái)調(diào)用。
實(shí)例方法定義時(shí)第一個(gè)參數(shù)為類的一個(gè)實(shí)例(self),調(diào)用時(shí)必須通過(guò)實(shí)例調(diào)用。
靜態(tài)方法使用@staticmethod裝飾,調(diào)用時(shí)可以使用類的實(shí)例或者類本身來(lái)調(diào)用。

5.__new__方法

__new__和__init__的作用

class A(object):
    def __init__(self):
        print('init方法')
    def __new__(cls, *args, **kwargs):
        print('new方法')
        return object.__new__(cls)
a=A()

在這里插入圖片描述

總結(jié):
1). __new__至少要有一個(gè)參數(shù)cls,代表要實(shí)例化的類,此參數(shù)在實(shí)例化時(shí)由Python解釋器自動(dòng)提供

2). __new__必須要有返回值,返回實(shí)例化出來(lái)的實(shí)例,這點(diǎn)在自己實(shí)現(xiàn)__new__時(shí)要特別注意,可以return父類__new__出來(lái)的實(shí)例,或者直接是object的__new__出來(lái)的實(shí)例

3). __init__有一個(gè)參數(shù)self,就是這個(gè)__new__返回的實(shí)例,__init__在__new__的基礎(chǔ)上可以完成一些其它初始化的動(dòng)作,__init__不需要返回值

4). 我們可以將類比作制造商,__new__方法就是前期的原材料購(gòu)買環(huán)節(jié),__init__方法就是在有原材料的基礎(chǔ)上,加工,初始化商品環(huán)節(jié)

6.單例模式

單例模式:永遠(yuǎn)用一個(gè)對(duì)象得實(shí)例,避免新建太多實(shí)例浪費(fèi)資源

實(shí)質(zhì):使用__new__方法新建類對(duì)象時(shí)先判斷是否已經(jīng)建立過(guò),如果建過(guò)就使用已有的對(duì)象

class Foo(object):
   instance = None
   def __init__(self):
      self.name = 'alex'
   def __new__(cls):
      if Foo.instance:
         return Foo.instance
      else:
         Foo.instance = object.__new__(cls)
         return Foo.instance
obj1 = Foo()
obj2 = Foo()
print(obj1,obj2)

在這里插入圖片描述

福利

class Teacher(object):
    __money=100000
    age=45
    def xuexi(self):
        print('只要學(xué)不死就往死里學(xué)')
    def __zhengqian(self):
        print('掙錢掙到吐')
    # 調(diào)用學(xué)生類中的掙錢方法
    def zhengqian(self):
        return self.__zhengqian()
    def money(self):
        return self.__money
    # 修改老師類中的私有屬性為200000
    def set_xiugai(self,money):
        self.__money=money
    def get_xiugai(self):
        return self.__money

class Student(Teacher):
    def xuexi(self):
        print('死活都不去學(xué)習(xí)')

s=Student()
s.xuexi()
# 調(diào)用學(xué)生類中掙錢的方法
s.zhengqian()
# 調(diào)用老師類中的私有屬性
print(s.money())
# 修改老師類中的私有屬性為200000
s.set_xiugai(200000)
print(s.get_xiugai())
# 調(diào)用老師類中的私有方法
s.zhengqian()
# 修改類屬性
s.age=55
print(s.age)

在這里插入圖片描述

在這里插入圖片描述

到此這篇關(guān)于Python中關(guān)于面向?qū)ο笏接袑傩苑椒ǖ脑敿?xì)講解的文章就介紹到這了,更多相關(guān)Python 面向?qū)ο?私有屬性方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 通過(guò)Python實(shí)現(xiàn)自動(dòng)填寫調(diào)查問(wèn)卷

    通過(guò)Python實(shí)現(xiàn)自動(dòng)填寫調(diào)查問(wèn)卷

    這篇文章主要介紹了通過(guò)Python實(shí)現(xiàn)自動(dòng)填寫調(diào)查問(wèn)卷的相關(guān)資料,需要的朋友可以參考下
    2017-09-09
  • matplotlib事件處理基礎(chǔ)(事件綁定、事件屬性)

    matplotlib事件處理基礎(chǔ)(事件綁定、事件屬性)

    這篇文章主要介紹了matplotlib事件處理基礎(chǔ)(事件綁定、事件屬性),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 將python依賴包打包成window下可執(zhí)行文件bat方式

    將python依賴包打包成window下可執(zhí)行文件bat方式

    今天小編就為大家分享一篇將python依賴包打包成window下可執(zhí)行文件bat方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • Python中urllib與urllib2模塊的變化與使用詳解

    Python中urllib與urllib2模塊的變化與使用詳解

    urllib是python提供的一個(gè)用于操作URL的模塊,在python2.x中有URllib庫(kù),也有Urllib2庫(kù),在python3.x中Urllib2合并到了Urllib中,我們爬取網(wǎng)頁(yè)的時(shí)候需要經(jīng)常使用到這個(gè)庫(kù),需要的朋友可以參考下
    2023-05-05
  • 通過(guò)實(shí)例學(xué)習(xí)Python Excel操作

    通過(guò)實(shí)例學(xué)習(xí)Python Excel操作

    這篇文章主要介紹了通過(guò)實(shí)例學(xué)習(xí)Python Excel操作,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • wxpython學(xué)習(xí)筆記(推薦查看)

    wxpython學(xué)習(xí)筆記(推薦查看)

    wxPython是Python編程語(yǔ)言的一個(gè)GUI工具箱。他使得Python程序員能夠輕松的創(chuàng)建具有健壯、功能強(qiáng)大的圖形用戶界面的程序
    2014-06-06
  • Python對(duì)字符串實(shí)現(xiàn)去重操作的方法示例

    Python對(duì)字符串實(shí)現(xiàn)去重操作的方法示例

    字符串去重是python中字符串操作常見的一個(gè)需求,最近在工作中就又遇到了,所以下面這篇文章主要給大家介紹了關(guān)于Python對(duì)字符串實(shí)現(xiàn)去重操作的相關(guān)資料,文中給出了詳細(xì)的介紹,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-08-08
  • 使用Python中的greenlet包實(shí)現(xiàn)并發(fā)編程的入門教程

    使用Python中的greenlet包實(shí)現(xiàn)并發(fā)編程的入門教程

    這篇文章主要介紹了使用Python中的greenlet包實(shí)現(xiàn)并發(fā)編程的入門教程,Python由于GIL的存在并不能實(shí)現(xiàn)真正的多線程并發(fā),greenlet可以做到一個(gè)相對(duì)的替換方案,需要的朋友可以參考下
    2015-04-04
  • python之yield和Generator深入解析

    python之yield和Generator深入解析

    這篇文章主要介紹了python之yield和Generator深入解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • python 分割符豎線的具體實(shí)現(xiàn)

    python 分割符豎線的具體實(shí)現(xiàn)

    豎線作為一種常見的分割符,能夠?qū)⒁恍形谋净驍?shù)據(jù)按照指定規(guī)則分割為多個(gè)部分,本文主要介紹了python 分割符豎線的具體實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01

最新評(píng)論