Python 面向对象编程

栏目: 后端 · 前端 · 发布时间: 7年前

内容简介:Python 面向对象编程
  • 关键字: 类、实例、继承、类属性、实例属性、私有变量、特殊变量
# 声明一个类(class)
class Animal(object):
    def eat():
        print('Animal can eat~')

# 声明一个子类 Dog,继承自 Animal
class Dog(Animal):

    # 声明一个特殊公有变量(类属性)
    __fatherClass__ = 'Animal'

    # 声明一个私有变量(类属性)
    __currentClass = 'Dog'

    # 新建实例时的初始化函数
    # 私有变量 __name,__age 为实例属性
    def __init__(self,name,age):
        self.__name = name
        self.__age = age

    def who(self):
        print('A dog, named %s' % self.__name)

    # 重写父类的 eat 方法
    def eat():
        print('Dog can eat~')


# 声明一个子类 Cat,继承自 Animal
class Cat(Animal):

    # 重写父类的 eat 方法
    def eat():
        print('Cat can eat~')



# 新建一个实例(instance)
dog = Dog('二哈', 3)

# __dict__ 存储实例属性
# dog.__dict__ => {'_Dog__name': '二哈', '_Dog__age': 3}
  • __name: 定义私有属性(前面是两个下划线)
  • __name__: 定义特殊公有属性
  • __dict__: 存储实例属性
  • dir(obj): 查看当前对象所有的属性方法
  • 注意区分实例属性和类属性
  • 继承 最大的好处是子类获得了父类的全部功能
  • 多态 是同一个行为具有多个不同表现形式或形态的能力,比如上面代码的 eat 行为有多种不同的表现
# 检测对象是否拥有某个属性

hasattr(dog, '__name')      => False
hasattr(dog, '_Dog__name')  => True
getattr(dog, '_Dog__name')  => '二哈'

高级概念

  • 关键字:__slots__、@property

  • __slots__ 用来限制实例添加自定义属性,子类实例允许定义的属性就是自身的 __slots__ 加上父类的 __slots__

# 声明一个类(class)
class Animal(object):
    
    # 限制实例可绑定的属性
    __slots__ = ()
    
    def eat():
        print('Animal can eat~')

# 声明一个子类 Dog,继承自 Animal
class Dog(Animal):

    # 限制实例可绑定的属性
    __slots__ = ('name','age')

    def __init__(self,name):
        self.name = name

# 声明一个子类 Cat,继承自 Animal
class Cat(Animal):
    pass

# 新建一个实例(instance)
dog = Dog('二哈')
dog.name                => '二哈'
dog.age = 3
dog.age                 => 3
dog.father = '大二哈'    => 报错
  • @property 装饰器: 把类中的一个方法变成属性,然后调用
class Student(object):

    def __init__(self, name, idNumber):
        self.__name = name
        self.__idNumber = idNumber

    # 读取属性 name
    # 因为没有为 name 属性设置 setter,所以 name 属性只读
 @property
    def name(self):
        return self.__name

    # 读取属性 idNumber
 @property
    def idNumber(self):
        return self.__idNumber

    # 修改属性 idNumber
 @idNumber.setter
    def idNumber(self, value):
        self.__idNumber = value

s = Student('percy','20141111')

s.name                    => 'percy'
s.name = 'bob'            => 报错
s.idNumber                => '20141111'
s.idNumber = '20143333'   => '20143333'
  • 多重继承: 一个子类继承多个父类
class Father111(object):
    pass

class Father222(object):
    pass

class Father333(object):
    pass

# 子类 Son 继承了 3 个父类
class Son(Father111, Father222, Father333):
    pass
  • 定制类: 通过为类定义一些特定的方法从而起到定制类的效果。下面只列出部分方法,详细方法请看 Special method names
class Student(object):

    # __init__ 用于初始化实例,类似其他语言的构造函数
    def __init__(self, name):
        self.__name = name

    # __str__ 在给当前实例应用 str() 方法时调用
    def __str__(self):
        print('你一定给当前实例调用了 str() 方法~')
        return 'some string'

    # __len__ 在给当前实例应用 len() 方法时调用
    def __len__(self):
        print('你一定给当前实例调用了 len() 方法~')
        return 111

    # __call__ 在把实例对象当成方法使用时调用
    def __call__(self):
        print('你一定把当前实例当方法调用了~')


p = Student('jack')

# 自行运行查看效果
str(p)
len(p)
p()

以上。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

产品的视角:从热闹到门道

产品的视角:从热闹到门道

后显慧 / 机械工业出版社 / 2016-1-1 / 69.00

本书在创造性的提出互联网产品定义的基础上,为读者提供了一个从0基础到产品操盘手的产品思维培养方法! 全书以互联网产品定义为基础,提出了产品思维学习的RAC模型,通过认识产品、还原产品和创造产品三个阶段去培养产品思维和产品认知。 通过大量的图片和视觉引导的方法,作者像零基础的用户深入浅出的描绘了一条产品经理的自我修养路径,并且提供了知识地图(knowledge map)和阅读雷达等工具,......一起来看看 《产品的视角:从热闹到门道》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

html转js在线工具
html转js在线工具

html转js在线工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换