Python面向对象

一、python3新式类

class newstyle(object):

        pass

继承自object类,有更多的功能。

二、类属性定义

1.定义属性两种方法

(1)直接定义

hobby = 'Play Computer'

(2)使用构造函数定义

def __init__(self,attr1,attr2)

2.公有属性、私有属性、保护属性(public、private、protect)

Python中没有私有属性这种属性保护机制,只能通过代码规范来实现。

在属性前面加下划线_age,表示私有属性。

三、类方法定义

1.函数和方法

函数:程序中的代码块,直接用函数名调用

方法:是类的一部分,必须与类结合,通过类或者对象调用(python中方法其实也是类的一个属性)

2. 方法的访问控制

与类属性一样,python中方法也没有访问控制,只能通过代码规范在方法前加下划线。

3.方法注解

(1)@classmethod注解:调用的时候用类名,而不是对象

(2)@property注解:像访问属性一样调用方法

class Programer(object):
    hobby = 'Play Computer'
    
    def __init__(self,name,age,weight):
        self.name = name
        self._age = age
        self.__weight = weight
        
    @classmethod
    def get_hobby(cls):
        return cls.hobby
    
    @property
    def get_weight(self):
        return self.__weight
    
    def self_introduction(self):
        print ('My Name is %s \n I am %s years old\n' % (self.name , self._age))
        
if __name__=='__main__':
    programer = Programer('Albert',25,80)
    print (dir(programer))
    print (Programer.get_hobby())  #类
    print (programer.get_weight)   #对象
    programer.self_introduction()

 

['_Programer__weight', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_age', 'get_hobby', 'get_weight', 'hobby', 'name', 'self_introduction']
Play Computer
80
My Name is Albert  I am 25 years old

四、类的继承

1.格式:

#创建newExample类继承父类BaseExample
class newExample(BaseExample):
    pass

2. 子类会继承父类的属性和方法;也可以自己定义,覆盖父类的属性和方法

3. 子类调用父类的方法

(1)用super()调用父类的方法(推荐)

class base(object):
    def run(self,arg):
        pass

class example(base):
    def fly(self,arg):
        super(example,self).run(arg)

(2)用父类名调用父类方法

class base(object):
    def run(self,arg):
        pass

class example(base):
    def fly(self,arg):
        base.run(arg)

4. 多继承(不常用)

class Base1(object):
    pass

class Base2(object):
    pass

class Base3(object):
    pass

class newExample( Base1 , Base2 , Base3 ):
    pass

5. 实例

class Programer(object):
    hobby = 'Play Computer'
    
    def __init__(self,name,age,weight):
        self.name = name
        self._age = age
        self.__weight = weight
        
    @classmethod
    def get_hobby(cls):
        return cls.hobby
    
    @property
    def get_weight(self):
        return self.__weight
    
    def self_introduction(self):
        print ('My Name is %s  I am %s years old\n' % (self.name , self._age))
        
class pyProgramer(Programer):
    
    def __init__(self, name, age, weight, language):
        super(pyProgramer, self).__init__(name, age, weight)
        self.language = language
        
if __name__=='__main__':
    programer = pyProgramer('Albert',25,80,'Python')
    print (dir(programer))
    print (programer.__dict__)
    print (type(programer))
    print (isinstance(programer, Programer))
['_Programer__weight', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_age', 'get_hobby', 'get_weight', 'hobby', 'language', 'name', 'self_introduction']
{'name': 'Albert', '_age': 25, '_Programer__weight': 80, 'language': 'Python'}
<class '__main__.pyProgramer'>
True

 五、类的多态

1. 要素:继承,重写

2. 实例

class Programer(object):
    hobby = 'Play Computer'
    
    def __init__(self,name,age,weight):
        self.name = name
        self._age = age
        self.__weight = weight
        
    @classmethod
    def get_hobby(cls):
        return cls.hobby
    
    @property
    def get_weight(self):
        return self.__weight
    
    def self_introduction(self):
        print ('My Name is %s  I am %s years old\n' % (self.name , self._age))
        
class pyProgramer(Programer):
    
    def __init__(self, name, age, weight, language):
        super(pyProgramer, self).__init__(name, age, weight)
        self.language = language
        
    def self_introduction(self):
        print('My Name is %s  My favorite language is %s' %(self.name, self.language))
        
def introduce(programer):
    if isinstance(programer, Programer):
        programer.self_introduction()
        
if __name__=='__main__':
    programer = Programer('Albert',25,80)
    pyprogramer = pyProgramer('Tim',25,80,'Python')
    introduce(programer)
    introduce(pyprogramer)
My Name is Albert  I am 25 years old

My Name is Tim  My favorite language is Python

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值