面向對象作業:真爽!!

因爲最近的作業總是要規範目錄,分文件寫,所以好久沒有在這上面發過作業了,還是要堅持一下,堅持把題發上來。加油!!!
PS:今天的作業特別爽,做完以後有一種舒暢的感覺

1、類的屬性和對象的屬性有什麼區別?
類的屬性是共享的,對象的屬性是對象私有的.
2、面向過程編程與面向對象編程的區別與應用場景?
區別:面向過程編程可擴展性低,面向對象編程可擴展性較高.
應用場景:當所要編寫的程序對擴展性要求不高時,我們應該使用面向過程編程的編程思想.
3、類和對象在內存中是如何保存的。
是獨立的兩塊區域,存在某種聯繫使對象可以訪問到類的內存空間.但是類無法訪問到對象的內存空間,對象與對象之間也不能相互訪問
4、什麼是綁定到對象的方法,、如何定義,如何調用,給誰用?有什麼特性
綁定方法就是由實例化的對象進行調用的在類中定義的函數.在類中定義的普通函數,必須要有至少一個參數.
綁定方法是給對象使用的,通過對象名.綁定方法進行調用.
特性:可以自動將對象最爲第一個參數傳入函數內部
5、如下示例, 請用面向對象的形式優化以下代碼
   在沒有學習類這個概念時,數據與功能是分離的,如下
   def exc1(host,port,db,charset):
       conn=connect(host,port,db,charset)
       conn.execute(sql)
       return xxx
   def exc2(host,port,db,charset,proc_name):
       conn=connect(host,port,db,charset)
       conn.call_proc(sql)
       return xxx
   # 每次調用都需要重複傳入一堆參數
   exc1('127.0.0.1',3306,'db1','utf8','select * from tb1;')
   exc2('127.0.0.1',3306,'db1','utf8','存儲過程的名字')

def obj1(sql):
    db = {'host': '127.0.0.1', 'port': 3306, 'db': 'db1', 'charset': 'utf-8'}
    def exc1(db, sql):
        conn = connect(db['host'], db['port'], db['db'], db['charset'])
        conn.execute(sql)
        return xxx
def obj2(sql):
    db = {'host': '127.0.0.1', 'port': 3306, 'db': 'db1', 'charset': 'utf-8'}
    def exc2(db, proc_name):
        conn = connect(db['host'], db['port'], db['db'], db['charset'])
        conn.call_proc(sql)
        return xxx

6、下面這段代碼的輸出結果將是什麼?請解釋。
    class Parent(object):
       x = 1

    class Child1(Parent):
       pass

    class Child2(Parent):
       pass

    print(Parent.x, Child1.x, Child2.x)
    輸出 1, 1, 1 Child1與Child2都是繼承的Parent,當自己的名稱空間中沒有x時,就會向父類尋找,父類x=1,所以兩個Child訪問x也爲1
    Child1.x = 2
    print(Parent.x, Child1.x, Child2.x)
    輸出 1, 2, 1 Child1增加了一個屬性x=2,再查找的時候就可以在自己的名稱空間找到x,所以child1的x與他倆不同了
    Parent.x = 3
    print(Parent.x, Child1.x, Child2.x)
    輸出 3, 2, 3 修改了Parent的值,那麼child2會跟着改變

7、多重繼承的執行順序,請解答以下輸出結果是什麼?並解釋。

    class A(object):
       def __init__(self):
           print('A')
           super(A, self).__init__()

    class B(object):
       def __init__(self):
           print('B')
           super(B, self).__init__()

    class C(A):
       def __init__(self):
           print('C')
           super(C, self).__init__()

    class D(A):
       def __init__(self):
           print('D')
           super(D, self).__init__()

    class E(B, C):
       def __init__(self):
           print('E')
           super(E, self).__init__()

    class F(C, B, D):
       def __init__(self):
           print('F')
           super(F, self).__init__()

    class G(D, B):
       def __init__(self):
           print('G')
           super(G, self).__init__()

    if __name__ == '__main__':
       g = G()
       f = F()

    G -> D -> A -> B -> F -> C -> B -> D -> A

8、什麼是新式類,什麼是經典類,二者有什麼區別?什麼是深度優先,什麼是廣度優先?
新式類:繼承了object類的所有類與該類的子類,子子類都叫新式類
經典類:沒有繼承object類的就叫經典類
在python3中只有新式類,廢棄了經典類
深度優先:沿着一條支線走到頭再去查找下一條支線就叫深度優先
廣度優先:沿着一條支線走到頭的前一個,然後走下一條支線,直到這個頭下的所有支線走完才走這個頭就叫廣度優先
9、用面向對象的形式編寫一個老師類, 老師有特徵:編號、姓名、性別、年齡、等級、工資,老師類中有功能
    1、生成老師唯一編號的功能,可以用hashlib對當前時間加上老師的所有信息進行校驗得到一個hash值來作爲老師的編號
        def create_id(self):
            pass
    2、獲取老師所有信息
        def tell_info(self):
            pass

    3、將老師對象序列化保存到文件裏,文件名即老師的編號,提示功能如下
        def save(self):
            with open('老師的編號','wb') as f:
                pickle.dump(self,f)

    4、從文件夾中取出存儲老師對象的文件,然後反序列化出老師對象,提示功能如下
        def get_obj_by_id(self,id):
            return pickle.load(open(id,'rb'))
import pickle
import hashlib
import time


class Teacher:
    def __init__(self, name, sex, age, level, salary):
        self.name = name
        self.age = age
        self.sex = sex
        self.level = level
        self.salary = salary

    def create_id(self):
        now = time.strftime('%Y-%m-%d---%X')
        info = self.name + self.sex + str(self.age) + str(self.level) + str(self.salary)
        res = hashlib.md5((now + info).encode('utf-8'))
        self.id = res.hexdigest()
        return self.id

    def tell_info(self):
        print((' Info of %s ' % (self.name)).center(50, '-'))
        print('''
    編號: %s
    姓名: %s
    性別: %s
    年齡: %s
    等級: %s
    薪資: %s
        ''' % (
        self.id, self.name, self.sex, self.age, self.level, self.salary))

    def save(self):
        with open(self.id, 'wb') as f:
            pickle.dump(self, f)

    def get_obj_by_id(self):
        return pickle.load(open(self.id, 'rb'))


t1 = Teacher('Catalog Spri', 'male', 18, 10, 3.1)
t1.create_id()
t1.tell_info()
t1.save()
res = t1.get_obj_by_id()
print(res)
10、按照定義老師的方式,再定義一個學生類
class Student:
    def __init__(self, name, sex, age):
        self.name = name
        self.age = age
        self.sex = sex

    def create_id(self):
        now = time.strftime('%Y-%m-%d---%X')
        info = self.name + self.sex + str(self.age)
        res = hashlib.md5((now + info).encode('utf-8'))
        self.id = res.hexdigest()
        return self.id

    def tell_info(self):
        print((' Info of %s ' % (self.name)).center(50, '-'))
        print('''
    編號: %s
    姓名: %s
    性別: %s
    年齡: %s
        ''' % (
        self.id, self.name, self.sex, self.age))

    def save(self):
        with open(self.id, 'wb') as f:
            pickle.dump(self, f)

    def get_obj_by_id(self):
        return pickle.load(open(self.id, 'rb'))

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章