关于python3中类class、以及yield的学习

2017/07/18 Python

关于python3中类class、以及yield的学习

类的简单说明:

  • 类class,主要有三大特性:封装、继承、多态
  • 类包括属性和方法,其中分为公有和私有
  • 定义公有属性和方法的格式:self.属性def 方法
  • 定义私有属性和方法的格式:self.__属性def __方法
  • 实例可直接调用公共属性或公共函数
  • 实例不可直接调用私有属性或私有方法
  • 在类的内部调用私有属性和方法的格式:self.__属性
  • 在子类的内部调用父类的私有属性和方法的格式:self._类__属性

数据封装:数据和函数封装成类的属性和方法

'''定义类'''
class Person:
    #定义构造方法
    def __init__(self,name,age):
        #定义实例私有属性
        self.__name = name
        #定义实例公共属性
        self.age  = age
    #定义公共方法,并内部调用私用方法   
    def say(self):
        self.__say()
    #定义私有方法,并内部调用实例私有属性
    def __say(self):
        print('姓名:{0},年龄:{1}'.format(self.__name,self.age))
'''类的实例化'''
tom = Person('TOM',23)
'''实例调用公共属性'''
tom.age
23
'''实例调用公共方法'''
tom.say()
姓名:TOM,年龄:23
'''实例不得调用私有属性,否则报错'''
tom.__name
---------------------------------------------------------------------------

AttributeError                            Traceback (most recent call last)

<ipython-input-47-77bed22a85d8> in <module>()
      1 '''私有属性不得实例使用,否则报错'''
----> 2 tom.__name


AttributeError: 'Person' object has no attribute '__name'
'''实例不得调用私有方法,否则报错'''
tom.__say()
---------------------------------------------------------------------------

AttributeError                            Traceback (most recent call last)

<ipython-input-49-3cb1c030b53f> in <module>()
      1 '''私有方法不得实例使用,否则报错'''
----> 2 tom.__say()


AttributeError: 'Person' object has no attribute '__say'

继承:子类可继承父类的属性和方法,且子类可自定义自己的属性和方法

'''定义子类'''
class Man(Person):

    def __init__(self,name,age,edu):

        #调用父类的构造函数
        super().__init__(name,age) #方法一使用super可简化
        #Person.__init__(self,name,age) #方法二使用此法

        #定义子类实例独立的属性
        self.edu = edu

    #定义子类的方法
    def mansay(self):
        print('子类的方法')
    #重构父类的方法
    def say(self):
        print('姓名:{0},年龄:{1},学历:{2}'.format(self._Person__name,self.age,self.edu))
'''子类实例化'''
joy = Man('JOY',33,'高中')
'''实例调用公开属性'''
joy.age
33
'''实例调用子类的方法'''
joy.mansay()
子类的方法
'''实例调用重构父类的方法'''
joy.say()
姓名:JOY,年龄:33,学历:高中

多态:实际上就是一个接口,即调用同一个函数,产生不同的结果

'''多态的体现'''
def fun(demo):
    demo.say()
fun(tom)
fun(joy)
姓名:TOM,年龄:23
姓名:JOY,年龄:33,学历:高中

使用yield的函数,此函数变成一个生成器也就是迭代器

def demo(n):
    for i in n:
        item = {'old':0,'new':0}
        item['old'] = i
        item['new'] = i+2
        yield item # 每执行一次到此就会暂停下,并输出函数值,然后继续往下执行
    print('完成') #当全部执行完毕后,才会执行后面的内容
a = demo([1,2,3])
for i in a:
    print(i)
{'old': 1, 'new': 3}
{'old': 2, 'new': 4}
{'old': 3, 'new': 5}
完成

声明:未经本人同意,严禁转载,违者必究

Show Disqus Comments

Search

    欢迎关注我的微信公众号

    闷骚的程序员

    Table of Contents