python:物件導向進階

來源:互聯網
上載者:User

標籤:delattr   安全   app   記憶體位址   一個   main   不能   orm   ict   

1,反射反射:使用字串類型的名字去操作變數反射就沒有安全問題,去操作記憶體中已經存在的變數 #反射對象中的屬性和方法 
class A:    price=20print(getattr(A,‘price‘))

#反射對象的屬性

class A:    def func(self):        print(‘in func‘)a =A()a.name =‘alex‘ret =getattr(a,‘name‘)#通過變數名的字串形式取到的值print(ret)
#反射對象的方法
ret =getattr(a,‘func‘)ret()

#反射類的方法:

if hasattr(A,‘func‘)):    getattr(A,‘func‘)()

 

#反射類的屬性 

class A:    price=20print(getattr(A,‘price‘))

#反射模組的屬性 

import myprint(getattr(my,‘day‘))
#反射自己模組中的變數
import sysprint(getattr(sys.modules[‘__main__‘],‘year‘))getattr(sys.modules[‘__main__‘],‘qqxing‘)()

setattr設定/修改變數

class A:  passsetattr(A,‘name‘,‘alex‘)print(A,name)

delattr刪除變數

delattr(a,‘name‘)
2,__str__和__repr__

改變對象的字串顯示__str__,__repr__

自定製格式化字串__format__

# 雙下方法# obj.__str__  str(obj)# obj.__repr__ repr(obj)
class Teacher:    def __init__(self,name,salary):        self.name =name        self.salary =salary    def __str__(self):        return "Teacher‘s object :%s"%self.name    def __repr__(self):        return str(self.__dict__)    def func(self):        return ‘wahaha‘nezha =Teacher(‘nazha‘,250)print(nazha)print(repr(nezha))print(‘>>> %r‘%nezha)
#object  裡有一個__str__,一旦被調用,就返回調用這個方法的#對象的記憶體位址l = [1,2,3,4,5]   # 執行個體化 執行個體化了一個列表類的對象print(l)# %s str()  直接列印 實際上都是走的__str__# %r repr()  實際上都是走的__repr__# repr 是str的備胎,但str不能做repr的備胎# print(obj)/‘%s‘%obj/str(obj)的時候,實際上是內部調用了obj.__str__方法,如果str方法有,那麼他返回的必定是一個字串# 如果沒有__str__方法,會先找本類中的__repr__方法,再沒有再找父類中的__str__。# repr(),只會找__repr__,如果沒有找父類的
class Classes:    def __init__(self,name):        self.name = name        self.student = []    def __len__(self):        return len(self.student)    def __str__(self):        return ‘classes‘py_s9= Classes(‘python全棧9期‘)py_s9.student.append(‘二哥‘)py_s9.student.append(‘泰哥‘)print(len(py_s9))print(py_s9)
#__del__class A:    def __del__(self):   # 解構函式: 在刪除一個對象之前進行一些收尾工作        self.f.close()a = A()a.f = open()   # 開啟檔案 第一 在作業系統中開啟了一個檔案 拿到了檔案操作符存在了記憶體中del a          # a.f 拿到了檔案操作符消失在了記憶體中del a   # del 既執行了這個方法,又刪除了變數
# __call__class A:    def __init__(self,name):        self.name = name    def __call__(self):        ‘‘‘        列印這個對象中的所有屬性        :return:        ‘‘‘        for k in self.__dict__:            print(k,self.__dict__[k])a = A(‘alex‘)()

 

 

python:物件導向進階

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.