一、类的继承和多态
类是可以继承的,python也不例外
- 直接将父类作为参数来声明一个新类:
class Student(object): // 这里就是指,默认的类的声明,就是继承自object def __init__(self): pass
- 子类直接具有了父类的属性和方法
- 但是当子类声明和父类相同的方法时,会覆盖父类的方法,这种行为被称为多态。
#!usr/bin/env python3 class People(): def __init__(self, name, sex): self.name = name self.sex = sex def getName(self): print("%s,这是父类的方法" % self.name) def getSex(self): print("%s, 这是父类的方法" % self.sex) class Student(People): def getSex(self): print("这是覆盖的方法") peo = People("tom", "男") stu = Student("jim", "女") print(isinstance(peo, People)) // true print(isinstance(stu, Student)) // true print(isinstance(stu, People)) // true,可以看到stu同样是People的实例 peo.getSex() // 男, 这是父类的方法 stu.getSex() // 这是覆盖的方法 // 覆盖了继承自父类的方法 peo.getName() // tom,这是父类的方法 stu.getName() // jim,这是父类的方法
二、获取对象信息
1. type 方法
>type(123)
> <class 'int'>
在基本数据类型中,可以直接打印显示,但是如果想判断一个对象是不是函数,那这样是不满足的了,这就需要types
2. types
它是python中的模块,分别有几个属性
a)types.FunctionType // 普通函数
b) types.BuildFunctionType // 内置函数
c) types.LambdaType // lambda函数
d) types.GeneratorType // 迭代器
3.isinstance
上一节已经提到了
isinstance (a,b) // 判断a是否是b的实例
同时这个是具有隔代有效的特性,即 A >> B >> C
c = C()
此时 :
isinstance(c , C) // true
isinstance(c, A) // true
注意 第二个参数可以是list或者tuple
4. dir()
#!usr/bin/env python3
class A():
def test(self):
pass
a = A()
print(dir(a))
打印结果如下:
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__',
'__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__',
'__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__',
'__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'test']
属性很多
其中类比与js,它也有对应的setPrototype等:
hasattr
hadattr(a, ‘b’) // 判断a对象是否包含b属性
setattr
setattr(a, ‘b’, 12) //给a对象的b属性赋值
getattr
getattr(a,‘b’)