Python学习——面向对象(二)

类变量:存在类中的变量,可以通过【类名.类变量名】的方式进行调用。也可以使用【self..类变量名】(self会先从本实例中找,如果本实例没有就去类中找)

类方法:存在类中的方法,可以通过【类名.类方法】的方式进行调用。使用@classmethod   def eat(cls):          cls代表类

    1、直接使用类名调用,不需要实例化

    2、可以使用类变量,cls.类变量

    3、实例对象也可以调用类方法:self.类方法

    4、类方法里面不可以有实例方法和属性

    @classmethod

    def eat(cls): cls代表类

静态方法:就是一个普通函数,定义在类中而已。  @staticmethod   静态方法()

    1、可以通过类名.静态方法名调用

    2、不能使用实例方法和属性

    3、不能使用类方法和属性

    4、实例化的对象可以调用静态方法。对象名.静态方法名

属性方法 :看起来像变量的函数。@property   def 方法名(self):

               1、本身是一个实例方法

     2、没有入参,只有self本来对象的一个参数

     3、使用方法:对象.属性方法。当变量使用,没有“()”

析构函数:在实例被销毁的时候执行,一般写关闭数据库和关闭文件等操作。释放内存

私有函数:在函数或者变量前面加__,就是私有变量。只能在类里面调用。比较安全

 

继承、封装和多态:python不支持多态

继承:目的是为了简化代码,减少重复代码

    #修改父类的方法

    在父类的基础上修改方法,要先调用父类的方法

    也可以使用supper().__init(参数)的方法。supper()自动找父类的方法,super()找到父类的同时,本类的self也被传递过去了

 

举个栗子:

class Myfather:                  #父类
hourse = 5 #类属性
__name = 'Dany' #私有属性
def __init__(self,secondname): #构造函数
self.secondname = secondname
print('我是父亲的姓%s'%self.secondname)
def __del__(self): #析构函数
print('我退休了')
def sing(self,sings): #实例方法,私有变量只在本类中使用
print('我是%s%s,我会唱歌%s'%(self.__name,self.secondname,sings)) #调用私有属性__name
print(self.__hate('韭菜')) #私有方法也只在本类使用
def __hate(self,thing): #私有方法
print('不喜欢吃%s'%thing)
@classmethod # 类方法
def earnmoney(cls):
print('挣钱,有%d套房子'%(cls.hourse)) #类方法可以代用类变量
@staticmethod
def smoking(): #静态方法
print('我会吸烟')
@property
def diy(self): #属性方法
return print('我会发明各种小工具')

class Myson(Myfather): #子类继承父类
def __init__(self,name1,name2): ##在父类基础上修改函数
super().__init__(name1)
print('父亲的姓:%s,母亲的姓:%s'%(self.secondname,name2))
# self.earnmoney() #实例对象也可以通过self调用类方法

son = Myson('xiao','cao') #调用子类的构造函数
son.sing('祖国祖国我爱你') #子类继承父类的实例方法
son.diy #属性函数调用
son.earnmoney() #类方法在实例化以后也可以用
son.smoking() #静态方法可以通过实例对象来调用

dady = Myfather('xiao') #父类实例化,调用父类的构造函数
dady.sing('喜欢你') #
Myfather.smoking() #静态方法调用

Myfather.earnmoney() #类方法调用
print('产业:',Myfather.hourse) #类变量调用


 


posted on 2018-08-01 13:57  大阳修炼中  阅读(144)  评论(0编辑  收藏  举报

导航