内容简介: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()
以上。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 面向Python,面向对象(基础)
- 面向Python,面向对象(基础3)
- <<深入PHP面向对象、模式与实践>>读书笔记:面向对象设计和过程式编程
- 《JavaScript面向对象精要》之六:对象模式
- 《JavaScript面向对象精要》之三:理解对象
- 面向对象的程序设计之理解对象
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
UNIX网络编程 卷1:套接字联网API(第3版)
[美]W. 理查德•史蒂文斯(W. Richard Stevens)、比尔• 芬纳(Bill Fenner)、安德鲁 M. 鲁道夫(Andrew M. Rudoff) / 匿名 / 人民邮电出版社 / 2014-6-1 / 129.00
《UNIX环境高级编程(第3版)》是被誉为UNIX编程“圣经”的Advanced Programming in the UNIX Environment一书的第3版。在本书第2版出版后的8年中,UNIX行业发生了巨大的变化,特别是影响UNIX编程接口的有关标准变化很大。本书在保持前一版风格的基础上,根据最新的标准对内容进行了修订和增补,反映了最新的技术发展。书中除了介绍UNIX文件和目录、标准I/......一起来看看 《UNIX网络编程 卷1:套接字联网API(第3版)》 这本书的介绍吧!
HTML 编码/解码
HTML 编码/解码
Base64 编码/解码
Base64 编码/解码