面向对象进阶

发布时间:2020-07-20 02:52:40 作者:mb5d40259989ce8
来源:网络 阅读:261

面向对象进阶

类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
数据成员:类变量或者实例变量, 用于处理类及其实例对象的相关的数据。
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
局部变量:定义在方法中的变量,只作用于当前实例的类。
实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
实例化:创建一个类的实例,类的具体对象。
方法:类中定义的函数。
*对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
在前面的章节我们已经了解了面向对象的入门知识,知道了如何定义类,如何创建对象以及如何给对象发消息。为了能够更好的使用面向对象编程思想进行程序开发,我们还需要对Python中的面向对象编程进行更为深入的了解。

时间打印
import time
time.sleep()

降序
a.sort(reverse=True)
end=' ' 变为一行

面向对象进阶

一.@property装饰器

之前我们讨论过Python中属性和方法访问权限的问题,虽然我们不建议将属性设置为私有的,但是如果直接将属性暴露给外界也是有问题的,比如我们没有办法检查赋给属性的值是否有效。我们之前的建议是将属性命名以单下划线开头,通过这种方式来暗示属性是受保护的,不建议外界直接访问,那么如果想访问属性可以通过属性的getter(访问器)和setter(修改器)方法进行对应的操作。如果要做到这点,就可以考虑使用@property包装器来包装getter和setter方法,使得对属性的访问既安全又方便,代码如下所示。
使用装饰器的时候,需要注意:
**1. 装饰器名,函数名需要一致.

  1. property需要先声明,再写setter,顺序不能倒过来
  2. 如果你希望一点变量只是被访问不能被修改,那么可以使用访问器@property
  3. 如果要修改访问器中的变量,可以搭建一个修改器,或者删除访问器.
class Person(object):
      def __init__(self, name, age):
          self._name = name
          self._age = age

    # 访问器 - getter方法
    @property
    def name(self):
        return self._name

    # 访问器 - getter方法
    @property
    def age(self):
        return self._age

    # 修改器 - setter方法
    @age.setter
    def age(self, age):
        self._age = age

    def play(self):
        if self._age <= 16:
            print('%s正在玩飞行棋.' % self._name)
        else:
            print('%s正在玩斗地主.' % self._name)
   def main():
       person = Person('王大锤', 12)
       person.play()
       person.age = 22
       person.play()

    # person.name = '白元芳'  # AttributeError: can't set attribute

if __name__ == '__main__':
    main()

二.python中类是动态的

class Num(object):
    def __init__(self):
        self.a = 1000

    def A(self):
        print(self.b)

num = Num()
num.b =1000000
#print(num.a)
print(num.b)
num.A()

三.slots魔法

我们讲到这里,不知道大家是否已经意识到,Python是一门[动态语言]。通常,动态语言允许我们在程序运行时给对象绑定新的属性或方法,当然也可以对已经绑定的属性和方法进行解绑定。但是如果我们需要限定自定义类型的对象只能绑定某些属性,可以通过在类中定义slots变量来进行限定。需要注意的是slots的限定只对当前类的对象生效,对子类并不起任何作用。


class Person(object):

    # 限定Person对象只能绑定_name, _age和_gender属性
    __slots__ = ('_name', '_age', '_gender')

    def __init__(self, name, age):
        self._name = name
        self._age = age

    @property
    def name(self):
        return self._name

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, age):
        self._age = age

    def play(self):
        if self._age <= 16:
            print('%s正在玩飞行棋.' % self._name)
        else:
            print('%s正在玩斗地主.' % self._name)

def main():
    person = Person('王大锤', 22)
    person.play()
    person._gender = '男'
    #AttributeError: 'Person' object has no attribute '_is_gay'
    #person._is_gay = True

私有:
class Name(object):
def init(self,a,b):
self.a=a
self.b=b
面向对象进阶

推荐阅读:
  1. Python入门进阶教程-面向对象
  2. 装饰器进阶

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

面向对象进阶

上一篇:AIX系统错误之--添加磁盘错误

下一篇:iPhone表情符号编码

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》