反射:
有:demo.py 裏面有 函數Foo()
str1 = 'demo'
str2 = 'Foo'
module = __import__(str1)
func = getattr(module,str2)
實例:通常適用於url
代碼目錄結構爲: backend包 下面又account.py模塊 裏面又login函數
data = raw_input('請輸入地址:') #account/login
array = data.split('/')
userspance = __import__('backend.'+array[0])
model = getattr(userspance,array[0])
func = getattr(model,arry[1])
func()
面向對象:
類:
class People(object):
name='name' 這是屬於類的變量,類直接可以訪問。
dict={} 字典是所有實例共享一份數據,共有
def __init__(self,name,age,job): 初始化函數(構造函數), 定義參數.這裏的變量是私有的
self.name=name 加self是變成實例變量,其他函數也能調用
self.age=age
self.job=job
self.__name=name 私有變量,外部不能訪問
def walk(self): 都需要加self(self指的是實例本身)
print "i am walking..."
self.__breath() 內部可以調用
def talk(self):
print "talking with sb...",self.name
def __breate(self): 私有方法外部不能訪問,對象不能訪問
pass
p1=People('dengminhui','10','enginner') 實例化,傳入參數
p1.walk()
p1.talk()
p1.__breath 不能調用
強行調用私有變量 p1.__People.__name
類的繼承:
class SchoolMember(object):
def __init__(self,name,age,sex):
self.name=name
self.age=age
selef.sex=sex
def func(self):
pass
繼承
class Student(SchoolMember):
def __init__(self,name,age,sex,grade):
SchoolMember.__init__(self,name,age,sex) 這裏是繼承父類的變量
self.grade=grade 重寫構造函數後,這裏是添加的變量
def func(self):
SchoolMember.tell(self) 函數重寫
添加code
多繼承
class School(object):
def __init__(self,name,tel,addr):
self.tel=tel
self.addr=addr
self.stu_list=[]
self.tech_list=[]
class Student(SchoolMember,School):
靜態方法:
class MyClass(object):
age = 22
def __init__(self):
self.name = "a"
def sayhi(self):
print "---sayhi 1"
@staticmethod #靜態方法 跟類沒什麼關係,不需要實例化即可調用,類的工具包
def sayhi2(): 不需要加self
print "---sayhi 2",self.name,self.age-----------> self對象不會傳進來,所以都不能訪問調用
@classmethod 不需要實例化即可調用,不能訪問實例數據。。。。實例化也可以調用屬性
def sayh3(self):
print "---sayhi 3" sself.name self.age 不能訪問self.name,只能訪問類屬性
@property 把一個靜態方法變成靜態屬性
def sayh4(self):
print "----sayhi4"
return 'test'
調用:
MyClass.syahi2()
m=MyClass()
m.sayh4 ------> 結果會是 test
print m.__dict__ __dict__方法會把對象的所有屬性全部打印出來。
新式類和經典類: