python的模块和类_Python模块和类.md
模塊的定義
代碼的層次結(jié)構(gòu)
對于python的層次結(jié)構(gòu)一般為包->模塊
包也就是文件夾,但是文件夾下必須有文件"init.py"那么此文件夾才可以被識(shí)別為包。"init.py"文件可以為空,也可以不為空。不為空的情況以后詳細(xì)寫
模塊其實(shí)就是.py文件
類的基礎(chǔ)
基本概念
在模塊中定義一個(gè)類,類的最基本結(jié)構(gòu)如下:
#對于模塊的說明
'a test module'
#作者
__author__ = 'liyue'
#定義一個(gè)類名稱為ClassDemo,繼承類頂級類object
class ClassDemo(object):
#定義一個(gè)類的成員函數(shù)
def sayHello(x):
print("Hello:%s" % x)
#下面的代碼有兩個(gè)作用:
# 1.調(diào)試或者執(zhí)行當(dāng)前文件,也就是ClassDemo時(shí)候,那么會(huì)執(zhí)行下面代碼
# 2.如果是其他文件調(diào)用當(dāng)前文件,那么下面代碼避免當(dāng)前文件重復(fù)執(zhí)行'''
if __name__ == "__main__":
#測試本文件
ClassDemo.sayHello('li')
類的調(diào)用
下面演示了怎么調(diào)用另一個(gè)模塊的類:
#對于模塊的說明
'a demo of call class'
#作者
__author__ = 'liyue'
#導(dǎo)入其他模塊有兩種寫法:
# import modulename.classname as 別名
# from moudlename imprt classname as 別名
#import FunctionDemo.ClassTest as ct
from FunctionDemo import ClassTest as ct
class ClassCall:
def testMain():
#將當(dāng)前的類名稱傳入
funInstance = ct.ClassDemo()
funInstance.sayHello()
#普通的調(diào)用傳入
ct.ClassDemo.sayHello('ClassCall')
if __name__ == '__main__':
#調(diào)用模塊ClassTest的類
ClassCall.testMain()
在這里要注意對于import的兩種方式使用細(xì)節(jié)。在python中重要關(guān)鍵字都是用兩個(gè)下劃線作為標(biāo)志,要注意寫法且自己定義時(shí)候不能重名。
變量的作用域
使用單下劃線作為前綴的變量:_XXX表明這是一個(gè)私有的變量。
這個(gè)私有的作用主要是用于編碼規(guī)范,不能完全防止訪問此變量。例如可以通過_classname_XXX的方式,且此此方式不是固定的。
對于變量的訪問最好通過函數(shù)封裝來完成
python的Syntactic sugar是需要特別注意的,一個(gè)函數(shù)沒有入?yún)?#xff0c;那么調(diào)用時(shí)候隱含了一個(gè)入?yún)⒁簿褪莝elf。也就是說對于一個(gè)函數(shù):
def fun(paraA);
pass
其真實(shí)的聲明是這樣的:
def fun(self, paraA):
pass
上述內(nèi)容代碼:
#對于模塊ClassTest.py的說明
'a test module'
#作者
__author__ = 'liyue'
#定義一個(gè)類名稱為ClassDemo,繼承類頂級類object
class ClassDemo(object):
#定義一個(gè)類的成員函數(shù)
def sayHello(x):
print("Hello:%s" % x)
name = ''
_age = 0
#定義一個(gè)初始化函數(shù)
def __init__(self, name, age):
self.name = name
self._age = age
#定義私有函數(shù)
def getterName(self):
return self.name
def _getterAge(self):
return self._age
def pintNameAndAge(self):
print('Name is:%s Age is:%s' % (self.getterName(), self._getterAge()))
#下面的代碼有兩個(gè)作用:
# 1.調(diào)試或者執(zhí)行當(dāng)前文件,也就是ClassDemo時(shí)候,那么會(huì)執(zhí)行下面代碼
# 2.如果是其他文件調(diào)用當(dāng)前文件,那么下面代碼避免當(dāng)前文件重復(fù)執(zhí)行'''
if __name__ == "__main__":
#測試本文件
ClassDemo.sayHello('li')
#測試函數(shù)的封裝
cd = ClassDemo('zhangsan', 20)
cd.pintNameAndAge()
對象信息
可以用type來獲取對象信息,type的返回值是類
對于有繼承關(guān)系的類而言用isInstance判斷,所以通常用isInstance即可
#對于模塊Animal.py的說明
'a demo of class type'
#作者
__author__ = 'liyue'
class Animal(object):
pass
class Dog(Animal):
pass
class Cat(Animal):
pass
class PrintInfo(object):
def testMain():
a = Animal()
d = Dog()
c = Cat()
print('Animal and Dog isInstance: %s' % isinstance(Animal, Dog))
print('a and Dog Animal: %s' % isinstance(a, Animal))
print("c's type is: %s" % type(c))
if __name__ == '__main__':
PrintInfo.testMain()
實(shí)例屬性和類屬性
#對于模塊Animal.py的說明
'a demo of class type'
#作者
__author__ = 'liyue'
class Animal(object):
name = 'an animal'
class PrintInfo(object):
def testMain():
a = Animal()
#沒有綁定新的類屬性,輸出默認(rèn)值
print(a.name)
#給實(shí)例綁定了類屬性,輸出實(shí)例的類屬性值
a.name = 'a dog'
print(a.name)
#類本身的屬性值不變
print(Animal.name)
#刪除實(shí)例綁定的類屬性值
del a.name
#此時(shí)又輸出默認(rèn)的值
print(a.name)
if __name__ == '__main__':
PrintInfo.testMain()
總結(jié)
以上是生活随笔為你收集整理的python的模块和类_Python模块和类.md的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cmd静默运行_【已解决】BAT批处理中
- 下一篇: 开机后能解锁吗_黔隆科技刷机教程360奇