1. 程式人生 > >類中的函數帶有self,不帶self的區別

類中的函數帶有self,不帶self的區別

object for in ron enum ima for index scan 實例

1.類裏函數不帶self,這是我們調用類裏的函數直接用類名.函數名()

class shop(object):
    def scan_goods():                 #括號內不帶self
        print(‘瀏覽商品‘)
    def choose_goods():
        print(‘選擇商品‘)
    def delete_goods():
        print(‘刪除商品‘)
a=getattr(shop,‘scan_goods‘)()
a=getattr(shop,‘delete_goods‘)()
lis=[(‘瀏覽商品‘,‘scan_goods‘),(‘選擇商品‘,‘choose_goods‘),(‘刪除商品‘,‘delete_goods‘)]
for index,opt in enumerate(lis,1):
    print(index,opt[0])            
    a=getattr(shop,opt[1])()                  #類名不加()直接加函數名調用

結果:

瀏覽商品
刪除商品
1 瀏覽商品
瀏覽商品
2 選擇商品
選擇商品
3 刪除商品
刪除商品

  

2.帶有self的類調用函數,調用類裏的函數直接用類名(args1,args2).函數名()

class Animal(object):
    def __init__(self,name,kind):
        self.name = name
        self.kind = kind

    def eat(self,food):             #帶有參數的self
        print(‘%s eat %s‘%(self.name,food))

    def drink(self):
        print(‘%s drink water‘%(self.name))

    def catch(self):
        print(‘%s catch mouse‘%(self.name))
Animal(‘貓‘,‘美短‘).catch()                      #調用Animal(),這裏需要帶括號傳參數      
結果: 貓 catch mouse

  

3.@staticmethod方法:

class C(object):
    @staticmethod
    def f():
        print(‘runoob‘);
 
C.f();          # 靜態方法無需實例化
cobj = C()
cobj.f()        # 也可以實例化後調用

  

類中的函數帶有self,不帶self的區別