<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] ## 1. 私有化 1. xx 公有變量 2. _xx私有屬性或者方法,禁止導入,類對象和子類可以訪問 3. __xx:雙前置下劃線,避免與子類中的屬性名沖突,無法在外部直接訪問(不能通過點的方式讀取屬性值,可寫)(私有) 4. __xx__:雙前后下劃線,?戶名字空間的魔法對象或屬性。 例如: __init__ , __ 不要??發明這樣的名字 5. xx_:單后置下劃線,?于避免與Python關鍵詞的沖突 ~~~ #coding=utf-8 class Person(object): def __init__(self, name, age, taste): self.name = name self._age = age self.__taste = taste def showperson(self): print(self.name) print(self._age) print(self.__taste) def dowork(self): self._work() self.__away() def _work(self): print('my _work') def __away(self): print('my __away') class Student(Person): def construction(self, name, age, taste): self.name = name self._age = age self.__taste = taste def showstudent(self): print(self.name) print(self._age) print(self.__taste) @staticmethod def testbug(): _Bug.showbug() #模塊內可以訪問, 當from cur_module import *時, 不導? class _Bug(object): @staticmethod def showbug(): print("showbug") s1 = Student('jack', 25, 'football') s1.showperson() print('*'*20) #?法訪問__taste,導致報錯 #s1.showstudent() s1.construction('rose', 30, 'basketball') s1.showperson() print('*'*20) s1.showstudent() print('*'*20) Student.testbug() ~~~ ![](https://box.kancloud.cn/50c1cb48351fa44654876e709060fb1d_1262x572.png) ## 2. property 對私有屬性,方便的get和set ~~~ class Money(object): def __init__(self): self.__money = 0 def getMoney(self): return self.__money def setMoney(self, value): if isinstance(value, int): self.__money = value else: print("error:不是整型數字") ~~~ 我們先要獲取money,就必須調用get和set了,特別不爽,還好有property屬性 a.money 取值調用getter,a.money=100 表示設置值,調用setter 這樣就是類似于屬性那樣賦值了,而且還可以實現屬性或者方法的權限控制 * property ~~~ class Money(object): def __init__(self): self.__money = 0 def getMoney(self): return self.__money def setMoney(self, value): if isinstance(value, int): self.__money = value else: print("error:不是整型數字") money = property(getMoney, setMoney) ~~~ 這樣就可以通過調用money ~~~ In [2]: a = Money() In [3]: a.money Out[3]: 0 In [4]: a.money = 100 In [5]: a.money Out[5]: 100 In [6]: a.getMoney() Out[6]: 100 ~~~ * 或者這么寫property屬性 ~~~ class Money(object): def __init__(self): self.__money = 0 @property # 定義了一個叫money的property屬性 def money(self): return self.__money @money.setter # 解釋為money屬性的setter def money(self, value): if isinstance(value, int): self.__money = value else: print("error:不是整型數字") ~~~ a.money 取值調用getter,a.money=100 表示設置值,調用setter ~~~ In [3]: a = Money() In [4]: In [4]: In [4]: a.money Out[4]: 0 In [5]: a.money = 100 In [6]: a.money Out[6]: 100 ~~~ ## 3. 導入模塊 1. 直接導入 import bao.xx.module 2. __import__ 例如 ~~~ module_plugin = __import__('plugins.user) # 導入包 module_file = getattr(module_plugin,user) # __import__獲得模塊包,通過getattr 才真正導入模塊 ~~~ ## 4. for else 如果我們不是以除正常方式以外的其他任意方式退出循環,那么else分支將被執行。也就是在循環體內沒有break語句、沒有return語句,或者沒有異常出現。 #### 4.1 for正常執行后,else執行 ~~~ >>> for i in range(5): ... print(i) ... else: ... print('Iterated over everything :)') ... 0 1 2 3 4 Iterated over everything :) ~~~ #### 4.2 有break發生,else不執行執行 ~~~ >>> for i in range(5): ... if i == 2: ... break ... print(i) ... else: ... print('Iterated over everything :)') ... 0 1 ~~~ 上面的代碼中,我們在range(5)上迭代并打印每個數字。 1. 因為我們讓循環正常完成,所以else分支也被執行,并打印出Iterated over everything :) 。 2. 相反,如果我們用break語句終止循環,那么else分支將不會執行: 3. 同樣不要忘記,以上所有也適應while…else: ## 5. ` __init__.py` 作用詳解 __init__.py 文件的作用是將文件夾變為一個Python模塊,Python 中的每個模塊的包中,都有__init__.py 文件。 1. 導入模塊時,__init__.py文件中的代碼會執行 2. 好處:在 __init__.py 里寫一些程序內部用到的數據結構或為用戶提供一個統一的接口。 ### 5.1 我們可以在__init__.py文件中批量導入我們所需要的模塊,而不再需要一個一個的導入。 ~~~ # package # __init__.py import re import urllib import sys import os ~~~ ~~~ # a.py import package print(package.re, package.urllib, package.sys, package.os) ~~~ 注意這里訪問__init__.py文件中的引用文件,需要加上包名。 `__init__.py`中還有一個重要的變量,__all__, 它用來將模塊全部導入。 ~~~ # __init__.py __all__ = ['os', 'sys', 're', 'urllib'] # a.py from package import * 這時就會把注冊在__init__.py文件中__all__列表中的模塊和包導入到當前文件中來。 ~~~ #### 例 scrapy包的__init__.py文件 ~~~ __all__ = ['__version__', 'version_info', 'twisted_version', 'Spider', 'Request', 'FormRequest', 'Selector', 'Item', 'Field'] # Scrapy version import pkgutil __version__ = pkgutil.get_data(__package__, 'VERSION').decode('ascii').strip() version_info = tuple(int(v) if v.isdigit() else v for v in __version__.split('.')) del pkgutil # Check minimum required Python version import sys if sys.version_info < (2, 7): print("Scrapy %s requires Python 2.7" % __version__) sys.exit(1) # Ignore noisy twisted deprecation warnings import warnings warnings.filterwarnings('ignore', category=DeprecationWarning, module='twisted') del warnings # Apply monkey patches to fix issues in external libraries from . import _monkeypatches del _monkeypatches from twisted import version as _txv twisted_version = (_txv.major, _txv.minor, _txv.micro) # Declare top-level shortcuts from scrapy.spiders import Spider from scrapy.http import Request, FormRequest from scrapy.selector import Selector from scrapy.item import Item, Field del sys ~~~ scrapy包中導入了item包中的Item,此時可以這樣:導入scrapy包后,直接使用Item ~~~ import scrapy class Yaoq(scrapy.Item): id = scrapy.Field() title = scrapy.Field() pubDate = scrapy.Field() author = scrapy.Field() authorLocation = scrapy.Field() content = scrapy.Field() ~~~ 如果 ~~~ from import * # 導入__all__中所有的模塊 ~~~ #### 例一、 以 django forms 模塊為例,在django.forms 模塊里定義了各種各樣的函數和類,這些函數和類分類放在不同的文件中。 ~~~ forms/ __init__.py extras/ ... fields.py forms.py widgets.py ... ~~~ 現在你要寫一個新 form ,必須繼承 Form 類,在 __init__.py 沒發揮作用時的代碼是這樣的: ~~~ class CommentForm(forms.forms.Form): name = forms.fields.CharField() url = forms.fields.URLField() comment = forms.fields.CharField(widget=forms.widgets.Textarea) ~~~ 這樣既不方便又很丑。而我們一般直接使用的是 django.forms 包下的 namespace。像這樣: ~~~ from django import forms class CommentForm(forms.Form): name = forms.CharField() url = forms.URLField() comment = forms.CharField(widget=forms.Textarea) ~~~ 這就是在 forms/__init__.py 里寫代碼的好處(可以引入 widgets, forms, fields) ~~~ from django.forms.fields import * from django.forms.forms import * from django.forms.formsets import * from django.forms.models import * from django.forms.widgets import * ~~~ #### 例二、 有這樣一個foo包 ~~~ foo/ __init__.py foofactories.py tallFoos.py shortfoos.py mediumfoos.py santaslittlehelperfoo.py superawsomefoo.py anotherfoo.py ~~~ 在init腳本里這樣寫: ~~~ __all__ = ['foofactories', 'tallFoos', 'shortfoos', 'medumfoos', 'santaslittlehelperfoo', 'superawsomefoo', 'anotherfoo'] # deprecated to keep older scripts who import this from breaking from foo.foofactories import fooFactory from foo.tallfoos import tallFoo from foo.shortfoos import shortFoo ~~~ 如此做,則可以在別的腳本里簡單方便的寫: ~~~ from foo import fooFactory, tallFoo, shortFoo ~~~ 簡化了代碼量。若 from foo import * ,則導入了init里的 __all__ 變量里注冊的所有模塊(不推薦) Django 經常把一些共通的類或函數放在 init 里,例如 django.conf.urls 包中的init里定義了三個方法 include,patterns,url。這些方法我們再熟悉不過。
                  <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>

                              哎呀哎呀视频在线观看