<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] 對象是特征與技能的結合體,而類則是一系列對象相似的特征與技能的結合體。 ### 定義類 * 在現實世界中,先有對象,再有類 * 在程序中,先定義(類),后使用類(用來產生對象) 在Python中程序中的類用class關鍵字定義,而在程序中特征用變量標識,技能用函數標識,因而類中最常見的無非是:變量和函數的定義 ``` class student(): school='CECT' def learn(self): print('is learning') def eat(self): print('is eating') def sleep(self): print('is sleeping') ``` 注意: * 類中可以有任意python代碼,這些代碼在類定義階段便會執行,因而會產生新的名稱空間,用來存放類的變量名與函數名,可以通過`student.__dict__`查看 * 類中定義的名字,都是類的屬性,點是訪問屬性的語法。 ### 直接操作類的屬性 ``` student.school #查 student.school='qh' #改 student.name=1 #增 del student.name #刪 ``` ### 類實例化為對象 ``` s1=student() s2=student() s3=student() ``` > 如此,實例化了三個對象s1、s2、s3,但現在這三者除屬性相同,如果想讓他們還有不同的熟悉,就要用到`__init__`來初始化 ### `__init__`初始化 注意:該方法是在對象產生之后才會執行,只用來為對象進行初始化操作,可以有任意代碼,但一定不能有返回值 ``` class student(): def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex ...... s1=student('noah',28,'男') print(s1.name,s1.age,s1.sex) #結果: noah 28 男 ``` >也可以先調用類產生空對象s1,然后用`student.__init__(s1,'李坦克','男',18)`初始化 ### 對象的使用 ``` s1.name #查,等同于s1.__dict__['name'] s1.name='王三炮' #改,等同于s1.__dict__['name']='王三炮' s1.course='python' #增,等同于s1.__dict__['course']='python' del s1.course #刪,等同于s1.__dict__.pop('course') ``` ### 類的屬性 類有兩種屬性:數據屬性和函數屬性 1、類的數據屬性是所有對象共享的 ~~~ #類的數據屬性是所有對象共享的,id都一樣 print(id(student.school)) print(id(s1.school)) #4377347328 print(id(s2.school)) #4377347328 print(id(s3.school)) #4377347328 ~~~ 2、類的函數數據是綁定給對象用的,稱為綁定到對象的方法 ~~~ #類的函數屬性是綁定給對象使用的,obj.method稱為綁定方法,內存地址都不一樣 print(student.learn) #<function student.learn at 0x1021329d8> print(s1.learn) #<bound method student.learn of <__main__.studentobject at 0x1021466d8>> print(s2.learn) #<bound method student.learn of <__main__.studentobject at 0x102146710>> print(s3.learn) #<bound method student.learn of <__main__.studentobject at 0x102146748>> #ps:id是python的實現機制,并不能真實反映內存地址,如果有內存地址,還是以內存地址為準 ~~~ ### 屬性查找順序 屬性查找順序:先在對象自己的名稱空間找,然后到類中找,再然后到父類中找,直到都找不到而拋出異常 注意下面的案例,屬性查找并不是就近原則,而是一定先從對象的名稱空間開始 ``` class Foo: def f1(self): print('Foo.f1') def f2(self): print('Foo.f2') self.f1() class Bar(Foo): def f1(self): print('Bar.f1') b=Bar() b.f2() # 打印結果: Foo.f2 Bar.f1 ``` ### 綁定方法 類中定義的函數,主要是給對象使用的,是綁定到對象的. ~~~ class student: school='CECT' def __init__(self,name,sex,age): self.name=name self.age=age self.sex=sex def learn(self): print('%s is learning' %self.name) #新增self.name def eat(self): print('%s is eating' %self.name) def sleep(self): print('%s is sleeping' %self.name) s1=student('李坦克','男',18) s2=student('王大炮','女',38) s3=student('牛榴彈','男',78) ~~~ 類中定義的函數是類的函數屬性,類可以使用,但必須遵循函數的參數規則,有幾個參數需要傳幾個參數 ~~~ student.learn(s1) #李坦克 is learning student.learn(s2) #王大炮 is learning student.learn(s3) #牛榴彈 is learning ~~~ 強調:綁定到對象的方法的特殊之處在于,綁定給誰就由誰來調用,誰來調用,就會將‘誰’本身當做第一個參數傳給方法,即自動傳值(方法`__init__`也是一樣的道理) ~~~ s1.learn() #等同于student.learn(s1) s2.learn() #等同于student.learn(s2) s3.learn() #等同于student.learn(s3) ~~~ **注意:綁定到對象的方法的這種自動傳值的特征,決定了在類中定義的函數都要默認寫一個參數self,self可以是任意名字,但是約定俗成地寫出self。**
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看