类与面向对象
1.Python的一切皆为对象
比如:在Python的列表学习中假定lst=[‘a’,‘b’,‘c’], 那么lst就是我们创建在list列表这个类下的对象。在idle中输入type(lst)得到结果<class ‘list’>,而输入type(list)得到结果<class ‘type’>。
2.三大重要概念
- 封装(Encapsulation):隐藏在实例化的背后,保证一些程序数据不被外部干扰和误用。简单理解为计算机代码背后又是无数个看不见的二进制被封装。
- 继承(Inheritance):子类继承父类(又叫超类、基类)先在子类中寻找变量名,然后找超类。因此子类可重新定义超类属性来改变子类从超类继承的行为。
- 多态(Polymorphism):同一接口,多个方法。传入一个数据却有不同运算方法。可以简单理解为字符串的加法原则与浮点数和整数各自的加法原则(它们相加方法和所得结果不一样)。
- 语法注意要点
实例:只有数据属性无方法属性,而方法属于类
构造器:–init–如果没有在类中定义,那么实例在创建之初仅仅是一个简单的名称空间
class AnimalFriend:
def __init__(self,name,age,sex='Male'):
self.name=name
self.age=age
self.sex=sex
def move(self):
print('禽兽朋友的名字:{},年龄:{},性别:{}'.format(self.name,self.age,self.sex))
def like(self):
print('在爬')
class Dog(AnimalFriend):
def __init__(self,name='西巴犬',age=1,sex='Male',height=30):
super().__init__(name,age,sex)#调用父类初始化方法
self.height=height
def move(self):
AnimalFriend.move(self)#重写父类方法
print('{},年龄:{},性别:{}'.format(self.name, self.age, self.sex))#添加额外代码
#以下是调用方法的测试
d1=Dog(height=30)
d1.move()
d1.like()
- 关于object类方法
–str–()返回一个描述该对象的字符串。通常返回一个由该对象所属的类名加上该对象默认是十六进制形式的内存地址组成的字符串。
–eq–()比较两个对象是否相等,通常比较俩对象是否所指向同一个引用。“==”比较得是两个对象是否相等,也会调用这个方法。
–dir–()显示一个对象内部所有属性和方法
–dict–以字典{‘key’:’value‘}形式显示该对象内部所有属性名和属性值
print(Dog.__dict__)
#结果为:{'__module__': '__main__', '__init__': <function Dog.__init__ at 0x7fa7ed183a60>, 'move': <function Dog.move at 0x7fa7ed183af0>, '__doc__': None}
print(d1.__class__)
#<class '__main__.Dog'>
print(Dog.__bases__)
#(<class '__main__.AnimalFriend'>,)
print(Dog.__name__)
#Dog
5.类、实例和其他对象的一些内建函数
(以下均为布尔函数)
issubclass():判断类A是否是另一个类B派生 语法:issubclass(subclass,supclass)
isinstance():判断xx对象是否是给定的实例 语法:isinstance(obj,class_obj)
hasattr():判断xx对象是否是拥有指定的属性,同类:getattr(),setattr(),delattr() 语法:hasattr(obj,‘attribute’)
(…不定期更新…) to be continued